如何设置具有键/子键配对的嵌套、可变数据库?

How do I set up a nested, mutable database with key/subkey pairings?

提问人:EdK 提问时间:9/27/2023 最后编辑:Trenton McKinneyEdK 更新时间:9/27/2023 访问量:65

问:

我正在将键和子键用于嵌套数据库。我希望数据库保存所有键/子键组合中的所有值。我想使用字典,因为它们是可变的。但是,字典会“扁平化”并忽略子项。该脚本似乎只保留最后一个子项值,而忽略其他唯一的子项。字典应该包含:{Stuff} {Different Stuff} 和 {Something Completely Different}。但它只返回最后一个键/子键对,“完全不同的东西”。

  [key1][subkey1] = {"Stuff"}
  [key1][subkey2] = {"Different stuff"}
  [key1][subkey3] = {"Something Completely Different"}

我想要使用伪代码的结构: 这是我尝试过的代码。我不确定字典是否只包含最后一个主键/子键对,或者我的打印结构是否没有显示完整的字典。字典里只有“完全不同的东西”。

    myNestedDict = dict()
    myNestedDict = {"key1": {"subkey1": {'data': "Stuff"}}}
    myNestedDict = {"key1": {"subkey2": {'data': "Different stuff"}}}
    myNestedDict = {"key1": {"subkey3": {'data': "Something Completely Different"}}}
    for key, value in myNestedDict.items():
        for subkey, subvalue in myNestedDict[key].items():
            print(key, " ", subkey, " ", subvalue)
python 数据库 字典 键值

评论

1赞 John Gordon 9/27/2023
您不只是在分配键/子键......您将完全重新分配每个语句中的整个变量。当然,您不会保留以前的内容......myNestedDict
0赞 EdK 9/27/2023
我该如何纠正这个问题?

答:

1赞 Shmath64 9/27/2023 #1

John Gordan 是对的,每次尝试添加子项时,您都会重新分配 myNestedDict。要在 python 中向字典添加键,请执行更类似的操作:

myNestedDict["key1"] = {"subkey1": {'data': "Stuff"}}

这将添加键:“key1”,并分配给它的值:嵌套字典:{“subkey1”: {'data': “Stuff”}}。

编辑:这是一个相关的 GeeksForGeeks 页面,您可能会觉得有用:https://www.geeksforgeeks.org/python-add-new-keys-to-a-dictionary/

1赞 Corralien 9/27/2023 #2

您可以使用和:pydanticdeep_update

# pip install pydantic
from pydantic.v1.utils import deep_update

myNestedDict = dict()
myNestedDict = deep_update(myNestedDict, {"key1": {"subkey1": {'data': "Stuff"}}})
myNestedDict = deep_update(myNestedDict, {"key1": {"subkey2": {'data': "Different stuff"}}})
myNestedDict = deep_update(myNestedDict, {"key1": {"subkey3": {'data': "Something Completely Different"}}})

输出:

>>> myNestedDict
{'key1': {'subkey1': {'data': 'Stuff'},
  'subkey2': {'data': 'Different stuff'},
  'subkey3': {'data': 'Something Completely Different'}}}

评论

1赞 EdK 10/7/2023
这是三个建议的解决方案中最好的。谢谢你的建议!
1赞 John Gordon 9/27/2023 #3

仅分配一次变量名称:myNestedDict

myNestedDict = {"key1": {"subkey1": {'data': "Stuff"}}}

然后在字典中分配其他键

myNestedDict["key1"]["subkey2"] = {'data': "Different stuff"}
myNestedDict["key1"]["subkey3"] = {'data': "Something Completely Different"}