如何交换Python字典指定键名称而不改变对应值?
问题描述
现有字典:
myDict = {"a": 1, "b": 2, "c": 3, "d": 4}
期望得到的结果:
myDict = {"b": 1, "a": 2, "c": 3, "d": 4}
尝试使用代码:
dictionary[new_key] = dictionary.pop(old_key)
但执行后得到错误结果:
myDict = {"b": 2, "c": 3, "d": 4, "a": 2}
正确解决方法
方法一:直接交换值并重组字典(适合小字典)
先交换a和b的值,再按目标顺序重新构建字典:
# 交换a、b的值 myDict["a"], myDict["b"] = myDict["b"], myDict["a"] # 按目标顺序重组字典 myDict = {"b": myDict["b"], "a": myDict["a"], "c": myDict["c"], "d": myDict["d"]}
方法二:直接构建目标字典
一步到位生成符合要求的字典:
myDict = { "b": myDict["a"], "a": myDict["b"], "c": myDict["c"], "d": myDict["d"] }
方法三:适用于大字典的通用写法
如果字典键较多,不想手动罗列所有键,可以先交换值,再重新排序键:
# 保存a、b的原始值 a_val, b_val = myDict["a"], myDict["b"] # 更新a、b的值 myDict["a"], myDict["b"] = b_val, a_val # 定义目标键顺序:b在前,a在后,其余键保持原有顺序 target_keys = ["b", "a"] + [key for key in myDict if key not in ("a", "b")] # 按顺序重建字典 myDict = {key: myDict[key] for key in target_keys}
错误原因说明
你用的dictionary[new_key] = dictionary.pop(old_key)操作,本质是将old_key对应的值取出并赋值给new_key,同时删除old_key。如果执行的是myDict["b"] = myDict.pop("a"),会把a的值1赋给b,此时b的值变成1,a被删除;如果后续又错误地把b的值赋给重新添加的a,就会出现a:2的错误结果。这种方法无法直接实现交换两个键的值并保持指定顺序的需求。
内容的提问来源于stack exchange,提问作者Maple06
相关产品推荐
相关产品推荐

