Преобразование списка в список в словарь - PullRequest
1 голос
/ 27 марта 2020

У меня есть такой список:

[['a','b','1','2']['c','d','3','4']]

, и я хочу преобразовать этот список в словарь, который выглядит примерно так:

{
    ('a','b'):('1','2'),
    ('c','d'):('3','4')
}

, например, ('a', 'b') & ('c', 'd') для ключа и ('1', '2') & ('3', '4') для значения

, поэтому я использовал код что-то вроде этого

new_dict = {}
for i, k in enumerate(li[0:2]):
    new_dict[k] =[x1[i] for x1 in li[2:]]
print(new_dict)

, но это вызвало непредсказуемую ошибку типа 'list'

Я пробовал несколько других способов, но это не сработало. Есть ли способ, которым я могу это исправить?

Ответы [ 4 ]

5 голосов
/ 27 марта 2020

Вы не можете иметь list в качестве ключа, но tuple возможно. Также вам не нужно срезать в вашем списке, но в подсписке.

Вам нужны 2 первых значения sublist[:2] в качестве ключа, а соответствующие значения - это подсписок из индекса 2 sublist[2:]

new_dict = {}
for sublist in li:
    new_dict[tuple(sublist[:2])] = tuple(sublist[2:])

print(new_dict)  # {('a', 'b'): ('1', '2'), ('c', 'd'): ('3', '4')}

То же самое с пониманием слова

new_dict = {tuple(sublist[:2]): tuple(sublist[2:]) for sublist in li}
print(new_dict)  # {('a', 'b'): ('1', '2'), ('c', 'd'): ('3', '4')}
1 голос
/ 27 марта 2020
li = [['a','b','1','2'],['c','d','3','4']]
new_dict = {}
for item in li:
    new_dict[(item[0], item[1])] = (item[2], item[3])
1 голос
/ 27 марта 2020

Я бы использовал list -компонентность следующим образом:

lst = [['a','b','1','2']['c','d','3','4']]
dct = dict([(tuple(i[:2]),tuple(i[2:])) for i in lst])
print(dct)

или альтернативно dict -компонентность:

dct = {tuple(i[:2]):tuple(i[2:]) for i in lst}

Вывод:

{('a', 'b'): ('1', '2'), ('c', 'd'): ('3', '4')}

Обратите внимание, что срезание list создает list s, которые являются изменяемыми и не могут использоваться в качестве dict ключей, поэтому я использую tuple для преобразования их в неизменяемые кортежи.

1 голос
/ 27 марта 2020

Вы можете сделать это с пониманием слова:

li = [
    ['a', 'b', '1', '2'],
    ['c', 'd', '3', '4'],
]

new_dict = {(i[0], i[1]): (i[2], i[3]) for i in li}

print(new_dict)


# result
{('a', 'b'): ('1', '2'), ('c', 'd'): ('3', '4')}
...