如果我有一个dict,d并且我想在d['e']['foo']['bar']上检查一个值,其中e和foo是字典,而bar给出一个字符串,那么在那个位置安全地获得值的方法是什么?除了试捕之外还有什么事吗?
发布于 2017-02-27 05:24:56
一个很好的方法是使用reduce。
d={'e':{'foo':{'bar':"final value"}}}
l=['e','foo','bar']
print reduce(lambda x,y:x.get(y),l, d)您可以创建一个function并将一个list传递给它。
输出:final value
发布于 2017-02-27 03:53:26
在默认的空字典中使用get:
>>> d = {'e':{'foo':{'bar':0}}}
>>> print(d.get('e', {}).get('foo', {}).get('bar'))
0
>>> print(d.get('f', {}).get('doo', {}).get('car'))
None
>>> print(d.get('e', {}).get('foo', {}).get('car'))
None
>>> print(d.get('e', {}).get('doo', {}).get('bar'))
None发布于 2017-02-27 03:59:56
一种方法是按照以下思路使用简单的助手函数:
def dive(d, *ks):
for k in ks:
if isinstance(d, dict) and k in d:
d = d[k]
else:
return None
return d
examples = [
{},
{'e': {'foo': 12}},
{'e': {'foo': {'bar': 999}}},
]
for i, e in enumerate(examples):
print(i, dive(e, 'e', 'foo', 'bar'))输出:
(0, None)
(1, None)
(2, 999)https://stackoverflow.com/questions/42477514
复制相似问题