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}