如果我有一个字典,d和我想检查一个值d['e']['foo']['bar']
其中e和foo是字典,并且bar给出一个字符串什么是一种方法安全地获得该位置的价值?除了尝试抓住之外还有什么?如何安全地检查一个Python字典是否有递归存储的多个密钥字典对
0
A
回答
3
一个好方法是使用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
0
确保钥匙在此快译通,你可以试试这个:
if "e" in d:
print d["e"]
或者尝试使用get方法,如果密钥不可然后返回默认值。
如果键在字典中,则返回键的值,否则为默认值。如果 默认没有给出,则默认为无,所以,这种方法从未 抛出一个KeyError。
d.get("e","default value")
1
使用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
+0
我正在尝试避免长链。但是这在技术上会起作用。 – Bren
1
一种方法是沿着这些线路使用一个简单的辅助功能:
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)
相关问题
- 1. 如何检查Python字典中是否存在多个键?
- 2. 检查一对密钥是否已经在字典中有一个值?
- 3. 如何检查字典是否有不需要的密钥?
- 4. 如何在一次传递中检查KeyError的多个字典密钥?
- 5. 检查字典是否是另一个字典的子集
- 6. Python:字典值指针是否存储密钥?
- 7. Python:检查一个变量是否是一个字典
- 8. 检查字典中是否至少包含一个字典
- 9. python:重写基于单独字典的单个字典密钥
- 10. Python从字典中删除密钥它是一个数字
- 11. 检查字典是否有密钥的时间复杂度是多少?
- 12. 检查一个字典中的值是否包含另一个字典
- 13. 检查字典对一个字
- 14. 在Python中为每个密钥存储最多5个值字典
- 15. Python:如何知道两个字典是否有相同的密钥
- 16. 检查一个特定的密钥在一个字典中的值是什么
- 17. 检查字典中是否存在密钥。如果没有,附加它
- 18. 如何在密钥存储在另一个对象中时访问字典值?
- 19. 具有多个值的Python字典密钥
- 20. 嵌套字典 - 针对个人密钥
- 21. 如何检查本地存储中的密钥是否有值?
- 22. 存储在一个Python字典
- 23. 检查返回的字典密钥是否导致列表
- 24. 计算多少个字典中有多个值的密钥
- 25. 建立一个旧的字典?字典递归帮助
- 26. 递归地通过字典
- 27. 递归字典创建python
- 28. 在具有相同密钥的字典中合并两个Python字典
- 29. 检查存储在字典中的参数是否有效
- 30. 未检查静态字典中的密钥是否存在线程安全? ReSharper的认为这是不
你可以尝试使用'collections.defaultdict()单曲。见http://stackoverflow.com/questions/5029934/python-defaultdict-of-defaultdict – synchronizer
@synchronizer,然后只检查值是一个“真正的”一个或没有。谢谢! – Bren
可以肯定的是,我正在编写一个快速程序来验证我所说的内容。 – synchronizer