我正在尝试在嵌套字典中保留键值的同时更新键。 虽然我找到了一种方法来做到这一点,但我不得不创建新的字典来迎合它。因此,想知道是否有人可以为我提供关于我所采用方法的更好的见解?
init_dict = {
'pageA' : {
0 : {
'menuA' : [
'a01',
'a02'
]
}
},
'pageB' : {
1 : {
'menuB' : [
'b10'
]
}
}
}
changed = {'pageB' : 0, 'pageA' : 1}
condense_dict = {}
for k, v in init_dict.items():
for i in v.keys():
condense_dict[k] = init_dict[k][i]
new_dict = {}
for i in condense_dict:
new_dict[i] = {}
new_dict[i][changed.get(i)] = condense_dict.get(i)
我的预期输出如下:
{
'pageA' : {
1 : {
'menuA' : [
'a01',
'a02'
]
}
},
'pageB' : {
0 : {
'menuB' : [
'b10'
]
}
}
}
答案 0 :(得分:2)
您可以从子字典中弹出大概唯一的键,并将其分配给changed
中每个条目的新键:
for k, v in changed.items():
init_dict[k][v] = init_dict[k].pop(next(iter(init_dict[k])))
init_dict
变为:
{'pageA': {1: {'menuA': ['a01', 'a02']}}, 'pageB': {0: {'menuB': ['b10']}}}
答案 1 :(得分:0)
可以使用.pop()
方法来完成此操作(尽管我确信您可以将其重写得更好)
init_dict = {
'pageA': {
0: {
'menuA' : [
'a01',
'a02'
]
}
},
'pageB': {
1: {
'menuB': [
'b10'
]
}
}
}
print(init_dict)
thing = init_dict.pop('pageA')
sub_thing = thing.pop(0)
redone = {1: sub_thing}
init_dict.update({'pageA': redone})
print(init_dict)
{'pageA':{0:{'menuA':['a01','a02']}},'pageB':{1:{'menuB':['b10']}}}} >
{'pageA':{1:{'menuA':['a01','a02']}},'pageB':{1:{'menuB':['b10']}}}} >
您可以看到与开始时相同的数据,但是我们将0
更改为1
答案 2 :(得分:-1)
在这里,我使用.pop()
并就地更改它。使用与您相同的init_dict
:
change_to = {1: 0, 0: 1}
for k, v in init_dict.items():
for old_key in v.keys():
if old_key in change_to:
v[change_to[old_key]] = v.pop(old_key)