>>> d2
{'egg': 3, 'ham': {'grill': 4, 'fry': 6, 'bake': 5}, 'spam': 2}
>>> d2.get('spamx',99)
99
>>> d2.get('ham')['fry']
6
我想获取火腿里面的炸鱼的值,如果没有,则获取值为99或88,就像第二个例子一样。但是怎么做呢?
>>> d2
{'egg': 3, 'ham': {'grill': 4, 'fry': 6, 'bake': 5}, 'spam': 2}
>>> d2.get('spamx',99)
99
>>> d2.get('ham')['fry']
6
我想获取火腿里面的炸鱼的值,如果没有,则获取值为99或88,就像第二个例子一样。但是怎么做呢?
d2.get('ham', {}).get('fry', 88)
在实际情况下,我可能会将其分解为几个语句。
ham = d2.get('ham', {})
fry = ham.get('fry', 88)
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)
functools.reduce(lambda d,x: d[x] if x in d else default, ['ham','spam'], d2)
- kennytm['bacon','spam']
引发了一个TypeError
。 - John La Rooyd.get('ham',{}).get('fry',88)
你也可以使用try except块
def get_ham_fry()
try:
return d['ham']['fry']
except AttributeError,e:
return 88
KeyError
(如果未找到键)或TypeError
(如果该项不支持字符串索引)。我认为AttributeError
仅适用于get
调用。 - Peter Gibson以下是处理嵌套字典的解决方案:
def get(root, *keys):
"""
Returns root[k_1][k_2]...[k_n] if all k_1, ..., k_n are valid keys/indices.
Returns None otherwise
"""
if not keys:
return root
if keys[0] not in root:
return None
if keys[0] in root:
return get(root[keys[0]], *keys[1:])
使用方法:
>>> d = {'a': 1, 'b': {'c': 3}}
>>> get(d, 'b', 'c')
3
>>> get(d. 'key that's not in d')
None
>>> get(d)
{'a': 1, 'b': {'c': 3}}
该问题的另一个解决方案可能是:
从'ham'获取'fry',否则返回88
result = d2['ham'].get('fry', 88)
d2.get('ham', {}).get('fry', 99)
,不要重复自己! - mykhald2.get('ham'...)
返回的不是字典(如果d2['ham']
是'other'
),则会出现错误。 - Peter Gibson