假设我想编写一个函数,它将从字典返回任意值,例如:mydict['foo']['bar']['baz']
,或者返回一个空值如果没有,则为字符串。但是,我不知道mydict['foo']
是否一定存在,更不用说mydict['foo']['bar']['baz']
.
我想做这样的事情:
safe_nested(dict, element):
try:
return dict[element]
except KeyError:
return ''
但我不知道如何编写代码来接受函数中的查找路径。我开始接受句点分隔的字符串(如 foo.bar.baz
),这样这个函数就可以递归地尝试获取下一个子字典,但这感觉不太像 Pythonic .我想知道是否有办法同时传递字典 (mydict
) 和我感兴趣的子结构 (['foo']['bar'][' baz']
),并让函数尝试访问它或在遇到 KeyError
时返回空字符串。
我的处理方式是否正确?
最佳答案
你应该使用标准的defaultdict
:https://docs.python.org/2/library/collections.html#collections.defaultdict
关于如何嵌套它们,参见:defaultdict of defaultdict, nested或 Multiple levels of 'collection.defaultdict' in Python
我认为这可以满足您的需求:
from collections import defaultdict
mydict = defaultdict(lambda: defaultdict(lambda: defaultdict(str)))
关于python:动态获取字典中的子字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28039608/