【问题标题】:How to organize 2 level array to a custom dictionary format?如何将 2 级数组组织为自定义字典格式?
【发布时间】:2020-10-21 10:08:15
【问题描述】:

我正在尝试转换这个数组

a = [
        ['A','B','C'],
        [1,33,45],
        [721,22,9]
    ]   

           

为了得到这个输出到字典:

b = { 
    'A':[1,721],
    'B':[33,22],
    'C':[45,9]
}

我现在的代码是这样的,出现这个错误:

b = {}

for i in range(1,len(a)):
    for j in range(len(a[i])):
        b[a[0][j]].append(a[i][j])
        
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
KeyError: 'A'           

请有人帮助我如何做到这一点。谢谢

【问题讨论】:

    标签: python arrays python-3.x dictionary


    【解决方案1】:

    找到您的问题:

    KeyError: 'A'
    

    如果你调试它,你会发现: 但是b是一个空字典,肯定会抛出异常。

    后面跟着你的代码,你可以改变

    b = {}
    

    from collections import defaultdict
    
    ....
    b = defaultdict(list)
    

    没关系。(其余代码不用改)


    其他想法:

    b = dict(zip(a[0], zip(*a[1:]))) # {'A': (1, 721), 'B': (33, 22), 'C': (45, 9)}
    
    b = dict(zip(a[0], map(list,zip(*a[1:])))) # {'A': [1, 721], 'B': [33, 22], 'C': [45, 9]}
    
    b = dict(zip(a[0], [list(i) for i in zip(*a[1:])])) # {'A': [1, 721], 'B': [33, 22], 'C': [45, 9]}
    

    【讨论】:

    • 感谢您的帮助。我选择您的解决方案是因为您共享的其他方式。您在哪个应用程序中进行了调试? zip 命令中的星号是什么意思?
    • @GerCas the asterisk 好像是unzip。你可以参考here
    【解决方案2】:

    您可以使用嵌套字典理解来执行此操作,首先循环遍历 a[0] 中的键值,然后遍历 a 中其他列表中的各个值:

    b = { k : [a[j][i] for j in range(1, len(a))] for i, k in enumerate(a[0]) }
    

    输出:

    {'A': [1, 721], 'B': [33, 22], 'C': [45, 9]}
    

    【讨论】:

    • 感谢 Nick 帮助分享您的解决方案
    • @GerCas 不用担心 - 我希望你觉得它有用。
    【解决方案3】:

    试试这个:

    from collections import defaultdict
    
    
    result = defaultdict(list)
    
    for i in a[1:]:  # start from second list
        for k, v in zip(a[0], i):
            result[k].append(v)
    
    print(dict(result))  # {'A': [1, 721], 'B': [33, 22], 'C': [45, 9]}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 2020-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多