Python:使用字典来计算列表中的项目
我是Python的新手,我有一个简单的问题,说我有一个项目列表:
['apple','red','apple','red','red','pear']
什么是最简单的方式将列表项添加到字典中,并计算项目出现在列表中的次数。
所以对于上面的列表,我想输出为:
{'apple': 2, 'red': 3, 'pear': 1}
在2.7和3.1中有特殊的Counter
字典用于此目的。
>>> from collections import Counter >>> Counter(['apple','red','apple','red','red','pear']) Counter({'red': 3, 'apple': 2, 'pear': 1})
我喜欢:
counts = dict() for i in items: counts[i] = counts.get(i, 0) + 1
.get允许您指定一个默认值,如果该键不存在。
>>> 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})
只需使用列表属性数\
i = ['apple','red','apple','red','red','pear'] d = {x:i.count(x) for x in i} print d
输出:{'pear':1,'apple':2,'red':3}
我一直认为,对于一个微不足道的任务,我不想导入任何东西。 但我可能是错误的,取决于collections.Counter正在更快或没有。
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()更好,因为它只会遍历迭代一次,而count可能会在每次迭代中search整个事物。 我用这种方法来parsing许多兆字节的统计数据,而且总是相当快。
考虑collections.Counter(从Python 2.7开始)。 https://docs.python.org/2/library/collections.html#collections.Counter
这个怎么样:
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}
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}