正如Paulo Almeida评论的那样,对于你发布的“明显”解决方案的例子是使用collections.Counter:
from collections import Counter
my_dict = Counter(iterable)
就是这样.
至于您发布的其他片段,并假设my_dict [key] = 1仅用于示例,您的一般问题是关于“如何最好地填充dict”:collections.defaultdict是同类dicts的正确选择(相同类型)所有键的值)其中类型具有默认值(数字零,空字符串,空列表…).我能想到的最常见的用例是填充列表(或集合或其他容器)的字典.
现在,当collections.Counter和collections.defaultdict都没有解决您的问题时,您有三种可能的模式:
>看看之前
>尝试/除了KeyError
> dict.setdefault(键,值)
如果您希望密钥已经存在,则try / except解决方案会更快 – try / except块设置非常快,但在引发异常时成本很高.就我而言,我不推荐它,除非你非常非常确定你现在的数据是什么以及将来会是什么样子.
“前瞻”解决方案的成本几乎不变,虽然不是免费的,但仍然相当便宜.这真是你最安全的选择.
dict.setdefault()解决方案与“前一个”解决方案具有大致相同的成本,但是你也有实现默认对象的固定成本,这通常会立即被摧毁.几年前这是一种常见的模式,但自收集起来以来,它的使用相当少,而不是说大多数都没用.