首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何安全地检查python字典是否具有递归存储的多个密钥字典对

如何安全地检查python字典是否具有递归存储的多个密钥字典对
EN

Stack Overflow用户
提问于 2017-02-27 03:48:18
回答 4查看 94关注 0票数 0

如果我有一个dict,d并且我想在d['e']['foo']['bar']上检查一个值,其中e和foo是字典,而bar给出一个字符串,那么在那个位置安全地获得值的方法是什么?除了试捕之外还有什么事吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-02-27 05:24:56

一个很好的方法是使用reduce

代码语言:javascript
复制
d={'e':{'foo':{'bar':"final value"}}}
l=['e','foo','bar']
print reduce(lambda x,y:x.get(y),l, d)

您可以创建一个function并将一个list传递给它。

输出:final value

票数 3
EN

Stack Overflow用户

发布于 2017-02-27 03:53:26

在默认的空字典中使用get

代码语言:javascript
复制
>>> 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
票数 1
EN

Stack Overflow用户

发布于 2017-02-27 03:59:56

一种方法是按照以下思路使用简单的助手函数:

代码语言:javascript
复制
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'))

输出:

代码语言:javascript
复制
(0, None)
(1, None)
(2, 999)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42477514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档