我想制作字典&来自2d数组的数组

时间:2018-05-17 09:22:13

标签: python dictionary

我想制作字典&来自二维数组的数组。

我写了代码:

data=[[['A','A'],['S','apple'],['W','NY']],[['A','B'],['S','windows'],['W','CF']],[['A','B'],['S','Lenovo'],['W','CH']],[['A','A'],['S','summung'],['W','KL']]]

dct = {}
ans=[]


for i in range(len(data)):
  for j in range(len(data[i])):
    print(j)
    print(data[i][j][0])
    if data[i][j][0] == 'A':
        if data[i][j][0] not in dct:
            dct[data[i][j][0]] = []
        dct[data[i][j][0]].append(data[i][j][2])
        ans.append(data[i][j][1])
    else:
        if data[i][j][0] not in dct:
            dct[data[i][j][0]] = []
        dct[data[i][j][0]].append(data[i][j][2])
        ans.append(data[i][j][1])

但是当我运行以下内容时:

dct[data[i][j][0]].append(data[i][j][2])

我得到IndexError

IndexError: list index out of range error

我的理想dct输出是

{'A': ['NY', 'KL'], 'B': ['CF', 'CH']}

我的理想ans输出是

['apple','summung','windows','Lenovo']

我是一个蟒蛇初学者,所以我真的不明白出了什么问题。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您正在执行的任务的逻辑过于复杂。以下是使用collections.defaultdictsorted列表理解的一种方式。

解决方案有效,因为sorted是稳定的。所以你的字典通过简单的迭代和排序的答案将对齐。

from collections import defaultdict

d = defaultdict(list)
for i in data:
    d[i[0][1]].append(i[2][1])

ans = [i[1][1] for i in sorted(data, key=lambda x: x[0][1])]

<强>结果

print(d)

defaultdict(list, {'A': ['NY', 'KL'],
                   'B': ['CF', 'CH']})

print(ans)

['apple', 'summung', 'windows', 'Lenovo']