如何更新嵌套字典中的键

How to update key in nested dict

提问人: 提问时间:9/4/2023 更新时间:9/4/2023 访问量:35

问:

我有一个看起来像这样的字典。

  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"
        }

当涉及到更改键值和嵌套字典时,我完全丢失了

任何帮助将不胜感激

字典 嵌套 kivy

评论


答:

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()}