作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有三个列表:
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
的组合(每个值的组合)来完成 W
和 C
,然后 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/
我是一名优秀的程序员,十分优秀!