昨天,我正在研究一个问题,我想要列出一些非独特的项目并从中创建一个字典,其中列表中的项目的唯一版本映射到每个项目出现的次数。这听起来非常简单,我立即开始为它编写字典理解,只是意识到一旦我开始我不知道如何完成因为我正在运行的键不是唯一的,并且值应该是加法的。仍然觉得应该有一个优雅的字典理解。想法?
我想要的是一种能够完成以下工作的理解:
#given
lst = [1,1,1,7,5,8,3,8,5,9,1]
#do
a_dict = defaultdict(int)
for item in lst:
a_dict[item] +=1
答案 0 :(得分:3)
Counter class in the collections module看起来可能会做你想做的事。
您可以这样做:
from collections import Counter
a_dict = Counter(lst)
早于2.7的Python版本没有Counter类,但您可以执行以下操作:
a_dict = dict((x, lst.count(x)) for x in set(lst))
无需进行set
转换。对于包含许多相同项目的大型列表,它可能会使代码运行得更快,但我不确定,因为我没有对它进行基准测试。