对于可变类型,例如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'
使用额外的内存。
有什么建议吗?
答案 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
计数器假设如果数据库中没有密钥,则其值为零。