Я хочу сделать словарь и массив из 2d массива - PullRequest
0 голосов
/ 17 мая 2018

Я хочу сделать словарь и массив из двухмерного массива.

Я написал коды:

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 голосов
/ 17 мая 2018

Ваша логика слишком сложна для задачи, которую вы хотите выполнить.Вот один из способов использования 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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...