python - 使用嵌套键查找字符串访问 python dict

标签 python dictionary

我希望在 python 中创建一个简单的嵌套“查找”机制,并希望确保在 python 的庞大库中的某处没有隐藏的东西在创建它之前还没有这样做。

我正在寻找格式如下的字典

my_dict = { 
  "root": { 
    "secondary": { 
      "user1": { 
          "name": "jim", 
          "age": 24 
      }, 
      "user2": { 
        "name": "fred", 
        "age": 25 
      } 
    } 
  } 
}

我正在尝试通过使用类似于

的十进制表示法来访问数据
root.secondary.user2

并将生成的字典作为响应返回。我在想一定有什么东西可以做到这一点,我可以毫不费力地写一个,但我想确保我没有重新创建文档中可能遗漏的东西。谢谢

最佳答案

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

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

这利用了这样一个事实,即在字典 d 中查找键 k 可以写成 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]]

关于python - 使用嵌套键查找字符串访问 python dict,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9320335/

相关文章:

python - 过滤字典列表

python代码不正确。不符合列出的要求

python - 在python中乘以多项式

python - 以表格格式打印嵌套字典

c++ - 将 vector map 写入 Omnetpp 中的文件

python-3.x - python : max value in a dictionary with 2 keys

arrays - 展平字典中的嵌套数组

python - 如何修复 Django 中的 "Forbidden (403) CSRF verification failed. Request aborted."错误

python - Discord.py 的 "on_message"可以将 't work after I implemented "schedule"写入其中

python - 未绑定(bind)本地错误 : local variable 'error' referenced before assignment