如何在 Python 中将 3 个列表合并到字典中

How to merge 3 lists into a dictionary in 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             
                           }
             }

我想过可能使用 2 个嵌套的 '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 词典理解起作用。

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

如果你觉得更容易阅读,你也可以构建2个嵌套的for循环。

您可以查看 Python 文档并开始研究 loops and the dict 文字语法。

这是一个实现,它使用 comprehensions 的概念和 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

利用成对列表可以变成字典的事实。

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

print(d)