我想制作字典&来自二维数组的数组。
我写了代码:
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']
我是一个蟒蛇初学者,所以我真的不明白出了什么问题。我该如何解决这个问题?
答案 0 :(得分:0)
您正在执行的任务的逻辑过于复杂。以下是使用collections.defaultdict
和sorted
列表理解的一种方式。
解决方案有效,因为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']