Python: создание списка списков в виде значений словаря

У меня есть два списка, которые я хотел бы связать по индексу как пары ключ-значение в словаре. Список ключей состоит из нескольких идентичных элементов. Я хотел бы, чтобы все элементы в списке значений были объединены в список списка. Я использую метод list.append (), но это не дает мне желаемого результата. Какие-нибудь рекомендации по коду или мне стоит взглянуть на проблему по-другому?

list1 = ['a', 'b', 'b', 'b', 'c']
list2 = [['1', '2', '3'], ['4', '5', '6'], [ '7', '8', '9'], ['10', '11', '12'], ['13', '14', '15']]

combo = {}
for i in range(len(list1)):
    if list1[i] in combo:
        combo[list1[i]].append(list2[i])
    else:
        combo[list1[i]] = list2[i]

Токовый выход:

{'a': ['1', '2', '3'], 'b': ['4', '5', '6', [ '7', '8', '9'], ['10', '11', '12']], 'c': ['13', '14', 15']}

Желаемый результат:

{'a': [['1', '2', '3']], 'b': [['4', '5', '6'], [ '7', '8', '9'], ['10', '11', '12']], 'c': [['13', '14', 15']]}

Я добавил ответ на ваш вопрос.

lmiguelvargasf 31.08.2018 21:24
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
3 469
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Используйте defaultdict с пустым списком в качестве начального значения

 result = defaultdict(list)

 for key, value in zip(list1, list2):
      result[key].append(value)

Попробуйте этот код. Это сработало, когда я попробовал использовать тот же ввод, что и вы.

#Input
list1= ['a','b', 'b','b', 'c']
list2 = [['1', '2', '3'], ['4', '5', '6'], [ '7', '8', '9'], ['10','11','12'], ['13', '14', '15']]

combo= {}
for index, value in enumerate(list1):
    if value in combo.keys():
        combo[value].append(list2[i])
    else:
        combo[value]= []
        combo.append(list2[i])
#output
print(combo)
{'a': [['1', '2', '3']],'b': [['4', '5', '6'], ['7', '8', '9'], ['10', '11', '12']], 'c': [['13', '14', '15']]}

Если вам нужен более питонический ответ, вы также можете использовать сжатие dict:

output = {key: [value] for key, value in zip(list1, list2)}

Другие вопросы по теме