gpt4 book ai didi

python - 通过键数组访问字典,或将键初始化为子字典

转载 作者:太空宇宙 更新时间:2023-11-03 15:12:11 24 4
gpt4 key购买 nike

我有一本字典(比如 dic),我想在其中添加有关城市的信息,因此数组的示例如下:

lst = ["Belgium", "Flanders", "Antwerp"]

但这可能是:

lst = ["Germany", "Berlin"]

即我想要更改字典的键数组的长度未知。我可以执行类似 dic[lst] 的操作来直接进入子目录列表吗?

理想情况下,每当 dic[lst] 尝试访问尚未定义的 key 时,它都会自动执行此操作。但这不是必需的:我总是可以检查子目录是否存在,并在浏览字典之前首先初始化所有子目录。

因此,我想要一些函数 f,它需要一个字典 dic、一个键数组 lst 和一个值 val。该函数应该返回字典 dic,但在对应于 lst 的条目中包含 val。

最佳答案

如果您要查找字典级联,可以使用以下插入机制:

def insert_cascade(dic,lst,val):
for item in lst[:-1]:
subdic = dic.get(item)
if subdic is None:
subdic = {}
dic[item] = subdic
dic = subdic
dic[lst[-1]] = val

现在,如果我们构建一个 world 字典:

world = {}

我们插入给定的示例输入,我们将生成:

>>> world = {}
>>> insert_cascade(world,["Belgium", "Flanders", "Antwerp"],'this is Antwerp')
>>> world
{'Belgium': {'Flanders': {'Antwerp': 'this is Antwerp'}}}
>>> insert_cascade(world,["Germany", "Berlin"],42)
>>> world
{'Belgium': {'Flanders': {'Antwerp': 'this is Antwerp'}}, 'Germany': {'Berlin': 42}}

如果我们稍后决定添加 ["Belgium", "Flanders", "Leuven"]["Belgium", "Brussels","Brussels"],我们得到:

>>> insert_cascade(world,["Belgium", "Flanders", "Leuven"],True)
>>> world
{'Belgium': {'Flanders': {'Leuven': True, 'Antwerp': 'this is Antwerp'}}, 'Germany': {'Berlin': 42}}
>>> insert_cascade(world,["Belgium", "Brussels","Brussels"],object())
>>> world
{'Belgium': {'Brussels': {'Brussels': <object object at 0x7f90f2769080>}, 'Flanders': {'Leuven': True, 'Antwerp': 'this is Antwerp'}}, 'Germany': {'Berlin': 42}}

因此,在这些插入之后,我们的 world 为每个城市提供了一个包含 'Belgium''Germany' 的字典,该对象是指定您通过 val

请注意,这里您可以将字典嵌套任意深度。例如,比利时的结构很复杂。因此,对于某些地区/国家,您可能会决定比其他地区/国家嵌套得更深。

关于python - 通过键数组访问字典,或将键初始化为子字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44136024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com