gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 08:13:49 27 4
gpt4 key购买 nike

我有三个列表:

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))

关于python - 如何将三个列表转换为字典,其中键取自前两个列表的笛卡尔积,值取自第三个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63053879/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com