使用Python中的数字类型处理缺少的键

时间:2017-04-07 09:20:02

标签: python dictionary

对于可变类型,例如list,而不是使用if else,我们可以处理丢失的关键问题:

dic = {'key1':[1, 2], 'key2':[1]}
dic.setdefault('key3', []).append(1)

仅检查'key3'中的dic一次。

但是对于不可变类型,例如整数,我们不能像这样使用setdefault()

dic = {'key1':3, 'key2':5}
dic.setdefault('key3', 0) += 1

由于setdefault()将返回整数0而不是变量dic['key3']

我不确定如何优雅地处理它,例如我能做的最好就是这样:

dic = {'key1':3, 'key2':5}
dic['key3'] = 1 if 'key3' not in dic else dic['key3'] + 1

但是此代码会在'key3'中检查dic两次,如果dic['key3'] + 1存在,还会为'key3'使用额外的内存。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以使用.get(..) 指定默认值,例如:

dic['key3'] = dic.get('key3',0) + 1

.get(key,default=None)对字典执行查找。如果找不到key,它将返回default

但我认为在这种情况下,您最好使用Counter

from collections import Counter

counter = Counter({'key1':3, 'key2':5})
counter['key3'] += 1

计数器假设如果数据库中没有密钥,则其值为零。