提问人: 提问时间:9/4/2023 更新时间:9/4/2023 访问量:35
如何更新嵌套字典中的键
How to update key in nested dict
问:
我有一个看起来像这样的字典。
d={
"user1": {
"food": {
"mleko": "milk",
"jajko": "egg",
"jablko": "apple",
"zaba": "frog"
},
"drinks": {
"kawa": "coffee",
"sok": "juice",
"herbata": "tea"
}
},
"user2": {
"random": {},
"smile": {}
},
"user3": {
"something": {},
"tree": {}
}
}
这是我现在的口述。它包含用户,其中包含您可以在其中添加单词的文件夹。用户数量、文件夹和单词是动态的。 它是我的应用程序的一部分,您可以在其中创建文件夹和单词并删除它们或更新它们。
但问题是我怎样才能更新密钥,这也是我的字典中的一个值。
假设 id 喜欢更改
"user1": {
"food": {
"mleko": "milk",
"jajko": "egg",
"jablko": "apple",
"zaba": "frog"
},
"drinks": {
"kawa": "coffee",
"sok": "juice",
"herbata": "tea"
}
自
"user1": {
"NEW VALUE": {
"mleko": "milk",
"jajko": "egg",
"jablko": "apple",
"zaba": "frog"
},
"SECOND VALUE": {
"kawa": "coffee",
"sok": "juice",
"herbata": "tea"
}
当涉及到更改键值和嵌套字典时,我完全丢失了
任何帮助将不胜感激
答:
0赞
Tobin Palmer
9/4/2023
#1
你试过了吗?
d["user1"]["food"] = "NEW_VALUE"
评论
1赞
9/4/2023
是的,但它确实为“食物”键增加了新的价值
0赞
John Anderson
9/4/2023
#2
试试这个:
d['user1']['NEW VALUE'] = d['user1']['food']
d['user1']['SECOND VALUE'] = d['user1']['drinks']
del d['user1']['food']
del d['user1']['drinks']
您可以执行一个更复杂的方法来保留顺序,但创建一个新字典:
new_dict = {}
for key, val in d.items():
if key == 'user1':
new_dict['user1'] = {}
for k,v in d['user1'].items():
if k == 'food':
new_dict['user1']['NEW VALUE'] = v
elif k == 'drinks':
new_dict['user1']['SECOND VALUE'] = v
else:
new_dict['user1'][k] = v
else:
new_dict[key] = val
d = new_dict
评论
0赞
9/4/2023
是的,我正要编辑并说我找到了这个解决方案或使用 POP,但我睡着了。这有效,但随后它将被添加为最后一项,这将改变在我的应用程序中显示这些数据的顺序。有没有办法切换“索引”,让它保持原地不变?
0赞
9/4/2023
或者,也许您更清楚在哪里或如何存储此类数据,以便更轻松地操作它们(更新/删除/添加)
0赞
John Anderson
9/4/2023
查看更新的答案。
0赞
user17351627
9/4/2023
#3
所以我找到了更改密钥并保持字典旧顺序的解决方案
{"NEW VALUE" if k == 'food' else k:v for k,v in d['user1'].items()}
下一个:打印特定的嵌套值项
评论