在列表中计算项目并将其转换为字典

8
我正在尝试从列表中生成一个字典。
names = ['tango', 'bravo', 'tango', 'alpha', 'alpha']

结果应该看起来像这样:
{'tango': 2 , 'bravo': 1 , 'alpha': 2}

我应该如何做到这一点?

1个回答

15

这正是Counter的用途。

>>> from collections import Counter
>>> Counter(['tango', 'bravo', 'tango', 'alpha', 'alpha'])
Counter({'tango': 2, 'alpha': 2, 'bravo': 1})
你可以像使用字典一样使用Counter对象,因为它是内置的dict类的子类。文档摘录如下:

class Counter(__builtin__.dict)
字典的子类,用于计数可哈希项。有时称为“bag”或“multiset”。元素被存储为字典键,它们的计数作为字典值存储。

编辑:
按要求,这里是另一种方式:
>>> names = ['tango', 'bravo', 'tango', 'alpha', 'alpha']
>>> d = {}
>>> for name in names:
...     d[name] = d.get(name, 0) + 1
... 
>>> d
{'bravo': 1, 'tango': 2, 'alpha': 2}

有没有其他的方式可以做到这件事? - user23634623
@uSEwrasd 可能还有其他一百种方法,为什么呢? - timgeb
如果可能的话,我在寻找一种不需要导入任何非基本内容的方法,或者这种导入是否算作语言的基本内容? - user23634623
1
我认为使用标准库非常基本,但是我在我的答案中添加了一个无需导入的解决方案。 - timgeb
@uSEwrasd np,愉快编程。 - timgeb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接