Как создать словарь из списка списков в Python? - PullRequest
0 голосов
/ 03 июля 2018

Предположим, у меня есть следующий список, составленный из списков

list1 = [['a','b'],['a'],['b','c'],['c','d'],['b'], ['a','d']]

Мне интересно, есть ли способ преобразовать каждый элемент list1 в словаре, где все новые словари будут использовать один и тот же ключ. Например: если ['a'] становится {'a':1}, а ['b'] становится {'b':2}, я бы хотел, чтобы для всех ключей a было значение 1, а для всех ключей b - значение 2. Поэтому при создании словаря ['a','b'] я бы хотел превратить в {'a':1, 'b':2}.

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

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

dict_list1 = [{'a':1,'b':2}, {'a':1}, {'b':2,'c':3}, {'c':3,'d':4}, {'b':2}, {'a':1,'d':4}]

Меня не так интересуют элементы, являющиеся этими числами, но цифры одинаковые для каждого отдельного ключа.

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

Используя chain и OrderedDict , вы можете сделать автоматическое отображение

from itertools import chain
from collections import OrderedDict

list1 = [['a','b'],['a'],['b','c'],['c','d'],['b'], ['a','d']]
# do flat list for auto index
flat_list = list(chain(*list1))
# remove duplicates
flat_list = list(OrderedDict.fromkeys(flat_list))
mapping = {x:flat_list.index(x)+1 for x in set(flat_list)}

[{e: mapping[e] for e in li} for li in list1]
0 голосов
/ 03 июля 2018

Вот попытка с ord(), также она будет работать как для заглавных, так и для строчных букв:

[{e: ord(e)%32 for e in li} for li in list1]
0 голосов
/ 03 июля 2018

Вы должны сначала объявить свое отображение:

mapping = dict(a=1, b=2, c=3, d=4)

Тогда вы можете просто использовать диктовку:

[{e: mapping[e] for e in li} for li in list1]
# [{'a': 1, 'b': 2}, {'a': 1}, {'b': 2, 'c': 3}, {'c': 3, 'd': 4}, {'b': 2}, {'a': 1, 'd': 4}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...