如何将计数器对象转换为dict?

2024-05-14 08:50:20 发布

您现在位置:Python中文网/ 问答频道 /正文

数据帧:

pair = collections.defaultdict(collections.Counter)

例如

pair = {'doc1':  {'word1':4, 'word2':3}, 
        'doc2':  {'word1':2, 'word3':4},
        'doc3':  {'word2':2, 'word4':1},
         ...}

我想保留数据帧,但要更改此部分的类型{'word1':4, 'word2':3}{'word1':2, 'word3':4}``...现在是Counter,我需要一个dict

我试图从pair获取数据,但我不知道如何为每个文档创建dict

new_pair = collections.defaultdict(collections.Counter)
for doc, tab in testing.form.items():
    for word, freq in tab.items():
        new_pair[doc][word] = freq 

我不想改变输出。我只需要在每个文档中,数据类型是dict,而不是Counter


Tags: 数据in文档newfordoccountertab
3条回答

一个Counter已经是一个dict-或者它的一个子类。但是,如果出于某种原因,您确实需要一个dict,那么它是一行:

>>> c = Counter(word1=4, word2=3)
>>> c
Counter({'word1': 4, 'word2': 3})
>>> dict(c)
{'word1': 4, 'word2': 3}

任何映射(任何类似于字典的行为)都可以传递到dict,您将得到一个具有相同内容的dict。不需要对它进行迭代来自己构建它。

这将为您提供一个循环,其中一行位于主体中,而不是嵌套循环。但任何形式的代码:

 thing = a new empty collection
 for elem in old_thing:
    Add something to do with elem to thing

通常可以使用生成器表达式或列表、集合或听写理解在一行中完成。我们正在构建一个dict,因此一个dict comprehension(示例部分是您最感兴趣的部分)似乎是可能的。我将把它作为一个练习留给读者。;-)

也许你在寻找:

>>> from collections import defaultdict
>>> pair = defaultdict(dict)
>>> pair[3][2]='hello'
>>>
>>> pair
defaultdict(<type 'dict'>, {3: {2: 'hello'}})
>>>
>>> pair[3]
{2: 'hello'}
>>> 
new_pair = {} # simple dict at the top level
for doc, tab in testing.form.items():
    for word, freq in tab.items():
        # top-level values is word counters
        new_pair[doc].setdefault(word, Counter()) += freq

相关问题 更多 >

    热门问题