[英]Writing code for dict and defaultdict
我有以下问题:
from collections import defaultdict
def give_it_to_me(d):
# This will crash if key 'it' does not exist
return d['it']
def give_it2_to_me(d):
# This will never crash, but does not trigger the default value in defaultdict
return d.get('it2')
d1 = defaultdict(int)
d2 = { 'it' : 55 }
print give_it_to_me(d1)
print give_it_to_me(d2)
print give_it2_to_me(d1)
print give_it2_to_me(d2)
正如您在评论中看到的那样,编写一个give_it_to_me
版本似乎是不可能的:
defaultdict
的默认值 还是我错了?
您可能需要在give_it_to_me
函数中添加更多代码。
使用try
except
语句检查现有密钥。
例如:
def give_it_to_me(d):
# This won't crash if key 'it' does not exist in a normal dict.
# It returns just None in that case.
# It returns the default value of an defaultdict if the key is not found.
try:
return d['it']
except KeyError:
return None
使用try .. except
:
try
return d['it']
except KeyError:
return None
为什么defaultdict.get
无法按预期工作 :
defaultdict
使用__missing__方法实现。 当密钥k
不在字典中时, dict.__getitem__(k)
__missing__
方法仅由dict[k]
(或dict.__getitem__(k)
) dict.__getitem__(k)
。
请注意,除
__getitem__()
之外的任何操作都不会调用__missing__()
__getitem__()
。 这意味着get()
将像普通字典一样,返回None作为默认值,而不是使用default_factory
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.