如何原生地增加字典元素的值?

use*_*074 5 python dictionary python-3.x

使用Python 3词典时,我不得不做这样的事情:

d=dict()
if 'k' in d:
    d['k']+=1
else:
    d['k']=0
Run Code Online (Sandbox Code Playgroud)

我似乎记得有一种本地方式来做这件事,但是正在查看文档并找不到它.你知道这是什么吗?

mir*_*ulo 12

这是用例collections.defaultdict,这里只是使用int默认工厂的callable.

>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> d
defaultdict(<class 'int'>, {})
>>> d['k'] +=1
>>> d
defaultdict(<class 'int'>, {'k': 1})
Run Code Online (Sandbox Code Playgroud)

A defaultdict配置为每当搜索到丢失的密钥时创建项目.你为它提供了一个可调用的(这里int()),每当查找带有__getitem__一个不存在的键时,它就会产生一个默认值.此可调用存储在名为的实例属性中default_factory.

如果你没有提供default_factory,你会得到一个KeyError常见的丢失密钥.

然后假设你想要一个不同的默认值,可能是1而不是0.你只需要传递一个可调用的,它可以提供你想要的起始值,在这种情况下非常简单

>>> d = defaultdict(lambda: 1)
Run Code Online (Sandbox Code Playgroud)

这显然也可以是任何常规命名函数.


但值得注意的是,如果在您的情况下您尝试使用字典来存储特定值的计数,则a collections.Counter更适合该作业.

>>> from collections import Counter
>>> Counter('kangaroo')
Counter({'a': 2, 'o': 2, 'n': 1, 'r': 1, 'k': 1, 'g': 1})
Run Code Online (Sandbox Code Playgroud)