使用Python 3词典时,我不得不做这样的事情:
d=dict()
if 'k' in d:
d['k']+=1
else:
d['k']=0
我似乎记得有一种原生方式可以做到这一点,但正在查看文档并找不到它。你知道这是什么吗?
答案 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