You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Python字典添加反向元组键并赋予对应相同值?

为字典添加反向元组键并赋予相同值的解决方案

错误原因分析

第一次尝试的问题

你写的cost[j,i]==cost[i,j]误用了比较运算符==,而非赋值的=;同时直接遍历原字典的键并修改字典,容易引发遍历异常,且不存在的键(1,0)会触发KeyError。

第二次尝试的问题

字典推导式中你遍历的是cost.keys(),得到的是元组(i,j),此时x是i、y是j,tuple(y)试图把整数转成元组自然会报错;另外你完全搞反了键值对应关系,应该用原键的反向元组作为新键,原value作为对应值。

正确实现方法

方法1:修改原字典

遍历原字典键的副本(避免遍历过程中字典大小变化导致的问题),为反向键赋值:

cost = {
        (0,1):70,
        (0,2):40,
        (1,2):65
        }

# 用list()生成键的副本,防止遍历过程中字典结构改变引发异常
for (i, j) in list(cost.keys()):
    cost[(j, i)] = cost[(i, j)]

print(cost)
# 输出:{(0, 1): 70, (0, 2): 40, (1, 2): 65, (1, 0): 70, (2, 0): 40, (2, 1): 65}

方法2:生成新字典(不修改原字典)

如果不想改动原字典,可以直接生成包含原键和反向键的新字典:

cost = {
        (0,1):70,
        (0,2):40,
        (1,2):65
        }

# 方式一:分步添加
cost_with_reverse = {}
for key, value in cost.items():
    cost_with_reverse[key] = value
    cost_with_reverse[key[::-1]] = value

# 方式二:简洁的字典推导式
cost_with_reverse = {k: v for key, v in cost.items() for k in (key, key[::-1])}

print(cost_with_reverse)
# 输出:{(0, 1): 70, (1, 0): 70, (0, 2): 40, (2, 0): 40, (1, 2): 65, (2, 1): 65}

额外提示

如果原字典中已存在部分反向键(比如同时有(0,1)和(1,0)),上述方法会用原键的值覆盖已有反向键的值。若要保留原有反向键的数值,可以添加存在性判断:

for (i, j) in list(cost.keys()):
    if (j, i) not in cost:
        cost[(j, i)] = cost[(i, j)]

内容的提问来源于stack exchange,提问作者SantanicoPandemonium

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 16:10:42