如何在defaultdict中添加每个计数?

时间:2012-10-09 23:06:46

标签: python

这是我必须计算文档中每个单词的内容:

from collections import defaultdict
word_dict=defaultdict(int)

def count_words(newstring):
    words=newstring.lower().split()
    for word in words:
        word_dict[word]+=1

当我打印word_dict时,我得到了以下结果:

defaultdict(<type 'int'>, {'rate': 1, 'babo-free': 1, 'risk': 3, 'interest': 1})

我需要添加每个计数,以便total_count变量应该等于6。

我想这对你们很多人来说可能太容易了,但作为初学者,我不知道从哪里开始。

2 个答案:

答案 0 :(得分:9)

您可以像使用任何词典一样执行此操作:

>>> d = {'a': 1, 'b': 1, 'c': 3, 'd': 4}
>>> sum(d.values())
9

在Python 2. *中你也可以使用

>>> sum(d.itervalues())
9

这不会创建一个新列表,但坦率地说,你的列表不太可能足够长,这可能成为一个瓶颈。而defaultdict的工作方式相同:

>>> from collections import defaultdict
>>> d2 = defaultdict(int)
>>> d2.update(d)
>>> d2
defaultdict(<type 'int'>, {'a': 1, 'c': 3, 'b': 1, 'd': 4})
>>> sum(d2.values())
9

顺便说一下,在Python 2.7+中,还有一个方便的Counter对象:

>>> from collections import Counter
>>> Counter("a b A B B c".lower().split())
Counter({'b': 3, 'a': 2, 'c': 1})
>>> Counter("a b A B B c".lower().split()).most_common()
[('b', 3), ('a', 2), ('c', 1)]
>>> sum(Counter("a b A B B c".lower().split()).values())
6

答案 1 :(得分:0)

使用iteritems,您可以获得键值对列表。有了它,您可以使用for循环将数字相加。

例如

sum = 0
for k,v in d.iteritems():
    sum += v