使用多个键查找字符串访问python dict

Tan*_*rax 13 python dictionary

我希望在python中创建一个简单的"查找"机制,并希望确保在创建它之前还没有隐藏在python中的大型库中的某些内容尚未执行此操作.

我正在寻找一个像这样的格式化的字典

my_dict = { 
  "root": { 
    "secondary": { 
      "user1": { 
          "name": "jim", 
          "age": 24 
      }, 
      "user2": { 
        "name": "fred", 
        "age": 25 
      } 
    } 
  } 
}
Run Code Online (Sandbox Code Playgroud)

我试图通过使用类似的十进制表示法来访问数据

root.secondary.user2
Run Code Online (Sandbox Code Playgroud)

并将得到的字典作为回复返回.我认为必须有一些东西可以做到这一点,我可以毫不费力地写一个,但我想确保我没有重新创建我可能在文档中遗漏的东西.谢谢

Sve*_*ach 28

标准库中没有任何内容可用于此目的,但您自己编写代码非常容易:

>>> key = "root.secondary.user2"
>>> reduce(dict.get, key.split("."), my_dict)
{'age': 25, 'name': 'fred'}
Run Code Online (Sandbox Code Playgroud)

这利用了这样一个事实,即k字典中的键的查找d可以写成dict.get(d, k).使用迭代地应用这reduce()导致期望的结果.

编辑:为了完整性,使用此方法获取,设置或删除字典键的三个函数:

def get_key(my_dict, key):
    return reduce(dict.get, key.split("."), my_dict)

def set_key(my_dict, key, value):
    key = key.split(".")
    my_dict = reduce(dict.get, key[:-1], my_dict)
    my_dict[key[-1]] = value

def del_key(my_dict, key):
    key = key.split(".")
    my_dict = reduce(dict.get, key[:-1], my_dict)
    del my_dict[key[-1]]
Run Code Online (Sandbox Code Playgroud)