在键数组中访问字典,或将键初始化为子字典

2024-06-14 12:13:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

例如,这可能是:

lst = ["Germany", "Berlin"]

例如,要更改字典的键数组的长度未知。我可以像dic[lst]那样直接进入子目录列表吗?你知道吗

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

因此,我希望有一个函数f,它包含一个dictionary dic、一个键lst数组和一个值val。该函数应该返回dictionary dic,但在对应lst的条目中包含val。你知道吗


Tags: 函数信息示例列表dictionary字典val数组
1条回答
网友
1楼 · 发布于 2024-06-14 12:13:24

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

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。你知道吗

请注意,这里可以将字典嵌套到任意深度。例如,比利时有一个复杂的结构。因此,对于某些地区/国家,您可能会决定比其他地区/国家更深入地筑巢。你知道吗

相关问题 更多 >