【问题标题】:How to create nested dictionaries PYTHON如何创建嵌套字典 PYTHON
【发布时间】:2021-01-26 07:19:25
【问题描述】:

这个问题和我学到的另一个类似How to Create Nested Dictionary in Python with 3 lists

如何从 3 个列表中获得如下输出形式的输出

a = ['A', 'B', 'C', 'D']
b = [1,2,3,4]
c = ['N1', 'N2', 'N3', N4]

output = [{'A': {'N1':1}}, {'B':{'N2':2}}, {'C':{'N3':3}}, {'D':{'N4':4}}]

输出与发布的链接不同。 如果我可以描述一下,我会说它是一个字典,其中“N#”是值 1-4 的关键字,而这些字典又具有关键字“A”-“D”,它们似乎都是字典里面的一些顶级关键字未显示,它们都是该主关键字的元素。

我使用了提供输出的这行代码。这些值与我使用的值不同,但关键是它没有那么多的大括号或边缘的方括号

d = {k: {x: y} for k, x, y in zip(a, b, c)}

# output: {'A':{'1' :'9'} , 'B':{'2':'8'}, 'C':{'3':'7'} , 'D':{'4':'6'}}

所以我已经解释了我认为这意味着什么,但我不确定如何继续。我尝试做类似的事情

d = {w:{k:{x:y}}for w,k,x,y in zip(sound, a, b, c)}

其中“声音”是相同元素值的列表,但仅打印出列表中的第 4 件事。任何帮助解决这个问题将不胜感激。谢谢。

【问题讨论】:

    标签: python dictionary nested zip layer


    【解决方案1】:

    使用列表推导。遍历压缩列表并创建嵌套字典:

    a = ['A', 'B', 'C', 'D']
    b = [1, 2, 3, 4]
    c = ['N1', 'N2', 'N3', 'N4']
    
    >>> [{k1: {k2: v}} for k1, v, k2 in zip(a, b, c)]
    [{'A': {'N1': 1}}, {'B': {'N2': 2}}, {'C': {'N3': 3}}, {'D': {'N4': 4}}]
    

    【讨论】:

    • 酷,谢谢。我将阅读列表理解。它是一个嵌套字典列表。
    • @Hackem2bits:在这种情况下,是的,它是一个字典列表。但是列表可以包含任何对象,并且列表推导也可以用于构造这些对象。
    【解决方案2】:

    @mhawke 的字典理解很好,但让我添加一个更天真的解决方案,可能需要了解如何实现这种嵌套字典:

    a = ['A', 'B', 'C', 'D']
    b = [1, 2, 3, 4]
    c = ['N1', 'N2', 'N3', 'N4']
    
    output = [{'A': {'N1':1}}, {'B':{'N2':2}}, {'C':{'N3':3}}, {'D':{'N4':4}}]
    
    def create_nested(a, b, c):
    
        result = []
        for i in range(len(a)):
            parent = {}
            child = {c[i]: b[i]}
            parent.setdefault(a[i], child)
            result.append(parent)
        return result
    
    
    result = create_nested(a, b, c)
    print(result)
    assert result == output
    

    使用枚举

    def create_nested(a, b, c):
    
        result = []
        
        for idx, value in enumerate(a):
            child = {c[idx]: b[idx]}
            parent = {a[idx]: child}
            result.append(parent)
        return result 
    

    短格式

    for idx, value in enumerate(a):
            parent = {a[idx]: {c[idx]: b[idx]}}
            result.append(parent)
        return result 
    

    【讨论】:

      猜你喜欢
      • 2023-01-18
      • 1970-01-01
      • 1970-01-01
      • 2018-11-28
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      • 1970-01-01
      • 2019-11-29
      相关资源
      最近更新 更多