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)
| 归档时间: |
|
| 查看次数: |
10428 次 |
| 最近记录: |