[英]How to convert Counter object to dict?
数据框:
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
。
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 理解(示例部分是您最感兴趣的部分)似乎是可能的。 我将提出它作为读者的练习。 ;-)
因为 Counter 已经是一个字典。
除了@lvc 的回答之外,我还想提出这个建议。
>>> c = Counter(word1=4, word2=3)
>>> c
Counter({'word1': 4, 'word2': 3})
>>> isinstance(c,dict)
True
>>> {**c}
{'word1': 4, 'word2': 3}
这允许您添加更多键并组合多个字典或计数器
>>> {**c, 'total': sum(c.values())}
{'word1': 4, 'word2': 3, 'total': 7}
也许您正在寻找:
>>> 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
Counter
也是一个dict
。 但是取决于你的需要,也许下面的代码就是你想要的。
new_pair ={}
for doc, tab in pari.items():
new_pair[doc] = {}
for word, freq in tab.items():
new_pair[doc][word] = freq
new_pair
字典就是你想要的。 祝你好运!
数据框:
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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.