如何为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
相关产品推荐
相关产品推荐

