python:动态获取字典中的子字典?

标签 python dictionary

假设我想编写一个函数,它将从字典返回任意值,例如: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, nestedMultiple 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/

相关文章:

java - Mapstruct 映射空对象的属性

haskell - 表示短位串的最佳方式是什么?

python - 我的 pygame 俄罗斯方 block 游戏总是卡住

python - 初学Matplotlib,如何为图表制作随机数据

python - 深度学习 Udacity 类(class) : Prob 2 assignment 1 (notMNIST)

python - 尽管有 Java 7,但 PyDev 没有出现在 Eclipse 中

python - 在sqlalchemy上查询相关实体(多对多)

python - 如何在 Protobuf 中序列化嵌套消息中的默认值

c# - 从字典中获取任何元素的最快方法

python - 在 Python 中将值附加到字典