1

昨天,我正在处理一个问题,我想获取一个非唯一项目的列表并从中制作一个字典,该字典将列表中项目的唯一版本映射到每个项目的出现次数。这听起来很简单,我立即开始为它编写字典理解,只是一旦我开始意识到我不知道如何完成,因为我正在运行的键不是唯一的,并且值应该是相加的. 仍然感觉应该对此有一个优雅的字典理解。想法?

我想要的是执行以下操作的理解:

#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
4

1 回答 1

3

集合模块中的Counter 类看起来可以做你想做的事。

你可以这样做:

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转换不是必需的。对于具有许多相同项目的大型列表,它可能会使代码运行得更快,但我不确定,因为我没有对其进行基准测试。

于 2012-05-25T17:46:36.030 回答