Python 嵌套字典查找及默认值
>>> d2
{'egg': 3, 'ham': {'grill': 4, 'fry': 6, 'bake': 5}, 'spam': 2}
>>> d2.get('spamx',99)
99
>>> d2.get('ham')['fry']
6
我想要获取“ham”里面的“fry”的值,如果没有的话,就获取99或者88,像第二个例子那样。可是,我该怎么做呢?
5 个回答
4
为了让默认值的获取正常工作,第一个默认值需要是一个字典,这样如果第一个获取失败,你才能正确地继续调用后面的 .get 方法。
d.get('ham',{}).get('fry',88)
你也可以使用 try 和 except 这个结构来处理错误。
def get_ham_fry()
try:
return d['ham']['fry']
except AttributeError,e:
return 88
5
如果你需要经常这样做,可以写一个辅助函数。
def get_nested(d, list_of_keys, default):
for k in list_of_keys:
if k not in d:
return default
d=d[k]
return d
print get_nested(d2,['ham','spam'],99)
print get_nested(d2,['ham','grill'],99)
19
d2.get('ham', {}).get('fry', 88)
在实际生活中,我可能会把它分成几个简单的语句来处理。
ham = d2.get('ham', {})
fry = ham.get('fry', 88)