我正在使用python 2.4更新一个非常复杂且可能未知的字典,并且密钥很复杂但很明确。例如,字典是:
dict1 = {
'server' : {
'index' : 0,
'info' : {
'ip' : '127.0.0.1',
'user' : {
'number' : 1001,
'tel' : '123456'
}
}
}
}
现在我想通过使用密钥'server' - 'info' - 'user' - 'number'来更新(删除或修改)它。
我想通过使用显式键列表来更新字典,而我只知道除了内部数据之外的字典对象,我该怎么办?
答案 0 :(得分:3)
考虑
>>> def get_nested(d, keys):
... return reduce(dict.get, [d] + keys)
...
>>> def set_nested(d, keys, value):
... get_nested(d, keys[:-1])[keys[-1]] = value
...
>>> dict1 = {
... 'server' : {
... 'index' : 0,
... 'info' : {
... 'ip' : '127.0.0.1',
... 'user' : {
... 'number' : 1001,
... 'tel' : '123456'
... }
... }
... }
... }
>>>
>>> keys = 'server-info-user-number'.split('-')
>>> get_nested(dict1, keys)
1001
>>> set_nested(dict1, keys, 2555)
>>> dict1
{'server': {'info': {'ip': '127.0.0.1', 'user': {'tel': '123456', 'number': 2555}}, 'index': 0}}
答案 1 :(得分:1)
您可以尝试解析密钥'server-info-user-number'
:
def get_from_dict(d, key):
keys = key.split('-')
for key in keys:
d = d[key]
return d
def set_from_dict(d, key, val):
keys = key.split('-')
for key in keys[:-1]:
d = d[key]
d[keys[-1]] = val
dict1 = {
'server' : {
'index' : 0,
'info' : {
'ip' : '127.0.0.1',
'user' : {
'number' : 1001,
'tel' : '123456'
}
}
}
}
key = 'server-info-user-number'
print(get_from_dict(dict1, key))
set_from_dict(dict1, key, 1002)
print(get_from_dict(dict1, key))
(为第一次获取返回1001
,然后设置为1002
并获取该值。)