Как объединить 3 списка в словарь в Python

origen=['Philadelphia', 'New Orleans']
destino=['Atlanta', 'Dallas', 'Columbus', 'Boston']
costo=[ ['2','6','6','2'] , ['1','2','5','7'] ]

Как мне нужно, чтобы они были объединены:

costo_envios={
              Philadelphia:{
                          Atlanta:2
                          Dallas:6
                          Columbus:6
                          Boston:2
                           }
              New Orleans:{
                           Atlanta:1
                           Dallas:2
                           Columbus:5
                           Boston:7             
                           }
             }

Я думал об использовании, может быть, двух вложенных for, но получаю ошибку «unlashable», что означает, что я использую неправильный тип индекса.

Я также пробовал это:

costo_envio={origen[l]:{destino[m]:costo[n]} for l,m,n in range(len(origen))}

Но я получил эту ошибку:

TypeError: cannot unpack non-iterable int object

Я действительно новичок в Python, только начал самостоятельно в этом месяце. Как мне это сделать?

Что вы пробовали? Вы смотрели на itertools в стандартной библиотеке?

Bakuriu 22.04.2022 18:49
минимальный воспроизводимый пример и трассировка стека. «Неудаляемая ошибка» означает, что вы пытаетесь использовать словарь, набор или список как КЛЮЧ, что невозможно.
Patrick Artner 22.04.2022 18:49
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
3
2
37
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Определите желаемую структуру и позвольте распознаванию словаря Python работать.

res = {o: {d:c for d, c in zip(destino, co)} for o, co in zip(origen, costo)}

Вы также можете построить 2 вложенных цикла for, если считаете, что их легче читать.

Вы можете взглянуть на документацию Python и начать изучать петли и литеральный синтаксис диктовать.

Вот одна реализация, использующая концепцию понимание и функцию zip:

costo_envio = {o: {d: int(c) for d, c in zip(destino, co)} for o, co in zip(origen, costo)}

# {'Philadelphia': {'Atlanta': 2, 'Dallas': 6, 'Columbus': 6, 'Boston': 2},
#  'New Orleans': {'Atlanta': 1, 'Dallas': 2, 'Columbus': 5, 'Boston': 7}}
Ответ принят как подходящий

добро пожаловать!

Вы можете использовать 2 цикла for, внешний для перебора источников и списков затрат, а внутренний для перебора пунктов назначения и затрат.

Вот мой код, надеюсь, он поможет!

origen = ['Philadelphia', 'New Orleans']
destino = ['Atlanta', 'Dallas', 'Columbus', 'Boston']
costo = [['2', '6', '6', '2'], ['1', '2', '5', '7']]

my_dict = {}

for origin, cost_list in zip(origen, costo):
    my_dict[origin] = {}
    for dest, cost in zip(destino, cost_list):
        my_dict[origin][dest] = cost

Удачи!

Это сработало!! Большое спасибо! Код было легко читать, и я мог легко его понять!

Emico 22.04.2022 19:15

@Эмико Отлично! Хорошо, как с учебой. Отметьте «V» рядом с ответом, который помог вам, чтобы другие пользователи знали, что на этот вопрос был дан ответ.

Bar Ifrah 22.04.2022 19:57

Используя тот факт, что список пар можно превратить в словарь.

d = dict(zip(origen, (dict(zip(*pairs)) for pairs in zip([destino]*len(costo), costo))))

print(d)

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