python - 如何将三个列表转换为字典,其中键取自前两个列表的笛卡尔积,值取自第三个列表

我有三个列表:

W = ['Anis', 'James', 'Arthur']
C = ['City1', 'City2', 'City3']
Cost = [53, 27, 13, 80, 47, 67, 53, 73, 47]

我想要这种格式的结果:

{('Anis', 'City1'): 53}
{('Anis', 'City2'): 27}
{('Anis', 'City3'): 13}
{('James', 'City1'): 80}
{('James', 'City2'): 47}
{('James', 'City3'): 67}
{('Arthur', 'City1'): 53}
{('Arthur', 'City2'): 73}
{('Arthur', 'City3'): 47}

我试过了

`for i in range(n1):
    for j in range(n1):
        for c in range(n2):
            combinations, mt = multidict({(W[i], C[j]): Cost[c]})
        print(mt)`

我得到的是这个:

{('Anis', 'City1'): 47}
{('Anis', 'City2'): 47}
{('Anis', 'City3'): 47}
{('James', 'City1'): 47}
{('James', 'City2'): 47}
{('James', 'City3'): 47}
{('Arthur', 'City1'): 47}
{('Arthur', 'City2'): 47}
{('Arthur', 'City3'): 47}

成本值在 for 循环中没有递增(我使用的是 gurobi 优化器库)。

最佳答案

这可以使用 itertools.product 的组合(每个值的组合)来完成 WC,然后 zip 用于生成的元组和您的 Cost 列表之间的对应值对:

import itertools

W = ['Anis', 'James', 'Arthur']
C = ['City1', 'City2', 'City3']
Cost = [53, 27, 13, 80, 47, 67, 53, 73, 47]

for k, v in zip(itertools.product(W, C), Cost):
    d = {k: v}
    print(d)

这给出:

{('Anis', 'City1'): 53}
{('Anis', 'City2'): 27}
{('Anis', 'City3'): 13}
{('James', 'City1'): 80}
{('James', 'City2'): 47}
{('James', 'City3'): 67}
{('Arthur', 'City1'): 53}
{('Arthur', 'City2'): 73}
{('Arthur', 'City3'): 47}

如果实际上您想要的是单个字典而不是一系列单元素字典,则将其修改为:

d = {k: v for k, v in zip(itertools.product(W, C), Cost)}
print(d)

给出:

{('Anis', 'City1'): 53, ('Anis', 'City2'): 27, ('Anis', 'City3'): 13, ('James', 'City1'): 80, ('James', 'City2'): 47, ('James', 'City3'): 67, ('Arthur', 'City1'): 53, ('Arthur', 'City2'): 73, ('Arthur', 'City3'): 47}

或更简单(感谢用户 Heap Overflow 的建议):

d = dict(zip(itertools.product(W, C), Cost))

https://stackoverflow.com/questions/63053879/

相关文章:

dictionary - clojure 中的 map 给出了意想不到的结果

c# - LINQ 按错误分组 : "does not contain a definition f

python - 生成圆周上的所有点

user-interface - 为什么输入密码2次?

mongodb - 从 mongodb shell 运行具有 mongodb 查询的脚本

iphone - 尝试每 10 秒更改一次 UIImageView

php - 多次哈希传​​递会使存储密码更安全吗?

visual-studio-code - VS Code 安装 Visual Studio Code

sql-server - 升级到 WSL2 后映射卷时 MSSQL 容器无法启动

.net - 如何检查数字是否为 .NET 中的整数?