Python 如何将二级数组组织为自定义字典格式?

Python 如何将二级数组组织为自定义字典格式?,python,arrays,python-3.x,dictionary,Python,Arrays,Python 3.x,Dictionary,我正在尝试转换此数组 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[

我正在尝试转换此数组

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'           

也许有人能帮我做这件事的方法。谢谢

您可以通过嵌套字典理解来完成此操作,首先循环[0]中的键值,然后循环[0]中其他列表中的单个值:

输出:

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

您可以通过嵌套字典理解来实现这一点,首先循环[0]中的键值,然后循环[0]中其他列表中的单个值:

输出:

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

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]}
试试这个:

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]}
发现您的问题:

KeyError: 'A'
如果对其进行调试,您将发现: 但b是一本空字典,它肯定会引发异常

只需跟随代码,就可以进行更改

b = {}

没有问题。代码的其余部分不需要更改

其他想法:

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]}
发现您的问题:

KeyError: 'A'
如果对其进行调试,您将发现: 但b是一本空字典,它肯定会引发异常

只需跟随代码,就可以进行更改

b = {}

没有问题。代码的其余部分不需要更改

其他想法:

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 comand”中的星号是什么意思?@GerCas星号看起来像解压。你可以参考。谢谢你的帮助。我选择您的解决方案是因为您共享了其他方式。您在哪个应用程序中进行调试?zip comand中的星号是什么意思?@GerCas星号看起来像解压。你可以参考。感谢Nick帮助分享你的信息solution@GerCas不用担心-我希望你觉得它有用。谢谢Nick帮助分享你的信息solution@GerCas别担心,我希望你觉得它有用。