如何使用动态查询遍历字典/JSON。
例如考虑下面的字典
dict = {'Adam': {
'English': {
'Score': 99,
'Time': 3400,
'Classes': 4},
'Math': {
'Score': 45,
'Time': 779,
'Classes': 5}},
'Tim': {
'English': {
'Score': 74,
'Time': 12,
'Classes': 99},
'Math': {
'Score': 12,
'Time': 333,
'Classes': 1}}
}
我想设置给定路径的值,例如
path = '/Adam/English/Score'
new_value = 87
注意,赋值也可以是另一个字典,例如
path = '/Adam/English'
new_value = {'Score': 11,
'Time': 2,
'Classes': 9}
任何帮助都是有用的。
编辑:下面是我的尝试keys = path.split('/')[1:]
new_data = None
for key in keys:
if new_data is None:
new_data = dict[key]
else:
new_data = new_data[key]
new_data = new_value
print(dict)
但是这里的dict
仍然是原来的值
我做了一些假设,例如,'/'
不是任何字典键的一部分,并且路径必须是有效的。根据需要调整功能
def deep_set(d, path, value):
sep = '/'
*trail, last = path.strip(sep).split(sep)
for part in trail:
d = d[part]
d[last] = value
演示:
>>> d = {'a': 1}
>>> deep_set(d, 'a', 2)
>>> d
{'a': 2}
>>> d = {'a': {'b': 1}}
>>> deep_set(d, 'a/b', 2)
>>> d
{'a': {'b': 2}}
编辑:
注意,如果有连续的'/'
字符,那么空字符串将被查找为字典键。例如
'a/b//c'.split('/') -> ['a', 'b', '', 'c']
目前还不清楚你是否想把'/'
字符作为路径的一部分(在我的函数中,它们被str.strip
删除)。同样,根据需要进行调整。