python:使用字典对列表中的项目进行计数

Python: Using a dictionary to count the items in a list

本问题已经有最佳答案,请猛点这里访问。

我刚接触过python,我有一个简单的问题,比如说我有一个项目列表:

1
['apple','red','apple','red','red','pear']

将列表项添加到字典中并计算列表项出现在列表中的次数的最简单方法是什么?

因此,对于上面的列表,我希望输出为:

1
{'apple': 2, 'red': 3, 'pear': 1}


在2.7和3.1中有专门的Counterdict。

1
2
3
>>> from collections import Counter
>>> Counter(['apple','red','apple','red','red','pear'])
Counter({'red': 3, 'apple': 2, 'pear': 1})


我喜欢:

1
2
3
counts = dict()
for i in items:
  counts[i] = counts.get(i, 0) + 1

.get允许您在密钥不存在时指定默认值。


1
2
3
4
5
6
7
>>> L = ['apple','red','apple','red','red','pear']
>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> for i in L:
...   d[i] += 1
>>> d
defaultdict(<type 'int'>, {'pear': 1, 'apple': 2, 'red': 3})


只需使用列表属性计数

1
2
3
i = ['apple','red','apple','red','red','pear']
d = {x:i.count(x) for x in i}
print d

输出:

1
{'pear': 1, 'apple': 2, 'red': 3}


我一直认为,对于一个微不足道的任务,我不想导入任何东西。但我可能错了,这取决于收藏品。计数器是否更快。

1
2
3
4
5
6
7
8
9
10
11
12
items ="Whats the simpliest way to add the list items to a dictionary"

stats = {}
for i in items:
    if i in stats:
        stats[i] += 1
    else:
        stats[i] = 1

# bonus
for i in sorted(stats, key=stats.get):
    print("%d×'%s'" % (stats[i], i))

我认为这可能比使用count()更好,因为它只会遍历一次iterable,而count可以在每次迭代中搜索整个内容。我用这个方法分析了许多兆字节的统计数据,它总是相当快的。


考虑collections.counter(从python 2.7开始提供)。https://docs.python.org/2/library/collections.html collections.counter


这个怎么样?

1
2
src = [ 'one', 'two', 'three', 'two', 'three', 'three' ]
result_dict = dict( [ (i, src.count(i)) for i in set(src) ] )

这导致

{'one': 1, 'three': 3, 'two': 2}


1
2
3
4
L = ['apple','red','apple','red','red','pear']
d = {}
[d.__setitem__(item,1+d.get(item,0)) for item in L]
print d

{'pear': 1, 'apple': 2, 'red': 3}