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

Python如何不使用sorted等方法交换字典两个键值对的顺序

Python字典指定键值对位置互换方案

需求说明

需要在不使用sorted等排序类函数的前提下,交换字典中两个指定键值对的排列顺序。
示例原始字典:

dico = {'a': [0, 0, '-', 'b'], 'b': [0, 0, 'c', 'd'], 'c': [1, 0, 'a', 'b'], 'd': [0, 0, 'c', '-']}

预期交换键b和键c位置后的效果:

dico = {'a': [0, 0, '-', 'b'], 'c': [1, 0, 'a', 'b'], 'b': [0, 0, 'c', 'd'], 'd': [0, 0, 'c', '-']}

注:Python 3.7及以上版本的字典默认会保留键值对的插入顺序,是实现该需求的基础。

实现代码

通过单次遍历原字典重建新字典的方式即可实现,全程不涉及排序操作:

def swap_dict_key_positions(origin_dict: dict, key_a, key_b) -> dict:
    # 校验待交换键是否存在
    if key_a not in origin_dict or key_b not in origin_dict:
        raise KeyError("待交换的两个键必须都存在于原字典中")
    
    new_dict = {}
    for k, v in origin_dict.items():
        if k == key_a:
            # 遍历到第一个待交换键时,先写入第二个键的键值对
            new_dict[key_b] = origin_dict[key_b]
        elif k == key_b:
            # 遍历到第二个待交换键时,写入第一个键的键值对
            new_dict[key_a] = origin_dict[key_a]
        else:
            # 其余键值对保持原有顺序写入
            new_dict[k] = v
    return new_dict


# 调用测试
dico = {'a': [0, 0, '-', 'b'], 'b': [0, 0, 'c', 'd'], 'c': [1, 0, 'a', 'b'], 'd': [0, 0, 'c', '-']}
dico = swap_dict_key_positions(dico, 'b', 'c')
print(dico)
# 输出结果与预期完全一致:{'a': [0, 0, '-', 'b'], 'c': [1, 0, 'a', 'b'], 'b': [0, 0, 'c', 'd'], 'd': [0, 0, 'c', '-']}

逻辑说明

  • 整个实现仅做一次原字典遍历,时间复杂度为O(n),没有调用任何排序类方法,完全符合需求约束。
  • 遍历过程中遇到两个待交换键时交叉写入对应值,其余键按原有遍历顺序写入新字典,最终新字典的键顺序就会实现两个指定键位置互换的效果。
  • 如果需要原地修改原字典而非生成新字典,可以结合pop、popitem方法操作,但逻辑相对繁琐,更推荐上述重建字典的实现,可读性和稳定性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:18:20