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, только начал самостоятельно в этом месяце. Как мне это сделать?
Определите желаемую структуру и позвольте распознаванию словаря 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
Удачи!
Это сработало!! Большое спасибо! Код было легко читать, и я мог легко его понять!
@Эмико Отлично! Хорошо, как с учебой. Отметьте «V» рядом с ответом, который помог вам, чтобы другие пользователи знали, что на этот вопрос был дан ответ.
Используя тот факт, что список пар можно превратить в словарь.
d = dict(zip(origen, (dict(zip(*pairs)) for pairs in zip([destino]*len(costo), costo))))
print(d)
Что вы пробовали? Вы смотрели на
itertools
в стандартной библиотеке?