Наивный подход для преобразования списка Python списков в словарь - PullRequest
2 голосов
/ 08 марта 2020

Предположим, у меня есть такой список lst = [[0,1,5,0], [4,0,0,7], [0,11]]. Я хочу создать словарь, где ключом является кортеж (i, j), а значение - lst[i][j]. Это должно показать что-то вроде этого d = {(0,0): 0, (0, 1): 1, (0,2): 5, (0,3): 0 ... (2,1): 11} Я полагаю, вы получили образец сейчас. Моя попытка создать что-то вроде этого звучит так:

def convert(lst):
    d = dict()
    for i in range(len(lst)):
        for j in range(i):
            d(i, j)] = lst[i][j]
    return d

Что не работает. Это не охватывает весь список. Пожалуйста, помогите мне найти проблему с моим скромным кодом.

Ответы [ 2 ]

6 голосов
/ 08 марта 2020

Ваш код является почти правильным, посмотрите на код ниже, который вносит небольшую корректировку:

def convert(lst):
    d = {}
    for i in range(len(lst)):
        for j in range(len(lst[i])): # This is the part that differentiates.
            d[(i, j)] = lst[i][j]
    return d

lst = [[0,1,5,0], [4,0,0,7], [0,11]]
print(convert(lst))

При запуске выдает:

{(0, 0): 0, (0, 1): 1, (0, 2): 5, (0, 3): 0, (1, 0): 4, (1, 1): 0, (1, 2): 0, (1, 3): 7, (2,0): 0, (2, 1): 11}
2 голосов
/ 08 марта 2020

Ответ от @hitter, вероятно, самый простой для понимания. В качестве альтернативы вы можете использовать словарь понимания .

>>> lst = [[0,1,5,0],[4,0,0,7],[0,11]]
>>> {(i, j): lst[i][j] for i in range(len(lst)) for j in range(len(lst[i]))}
{(0, 0): 0, (0, 1): 1, (0, 2): 5, (0, 3): 0, (1, 0): 4, (1, 1): 0, (1, 2): 0, (1, 3): 7, (2, 0): 0, (2, 1): 11}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...