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

时间:2016-07-20 17:02:32

标签: python python-3.x dictionary

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

d=dict()
if 'k' in d:
    d['k']+=1
else:
    d['k']=0

我似乎记得有一种原生方式可以做到这一点,但正在查看文档并找不到它。你知道这是什么吗?

2 个答案:

答案 0 :(得分: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})

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

如果您没有提供default_factory,那么您可以按常规获得KeyError以查找丢失的密钥。

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

>>> d = defaultdict(lambda: 1)

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

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

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

答案 1 :(得分:0)

请注意,您始终可以通过在表达式中使用if stamemt来消除混乱:

d['k'] = d['k'] + 1 if 'k' in d else 0