Python字典中如何按索引交换条目位置
Python 单字典按索引交换键值对条目实操方法
实现基础
- Python 3.7+ 内置字典原生保留条目插入顺序,这是按索引调整位置的核心前提
- Python 3.6及更早版本无内置顺序保障,需借助
collections.OrderedDict实现相同效果
适配当前场景的操作流程
你给出的初始字典条目顺序为A→B→C→D→E→F→G→H,目标是互换索引0(A条目)与索引5(F条目)的位置,得到F→B→C→D→E→A→G→H的顺序,具体实现可拆解为3步:
- 拆分字典为独立的键列表、值列表,依托列表的索引可变性完成位置调整
# 载入初始字典 ori_dict = {'A': [4, 7], 'B': [5, 1], 'C': [0, 5], 'D': [1, 3], 'E': [3, 0], 'F': [2, 6], 'G': [7, 2], 'H': [6, 4]} # 拆分为可按索引操作的键列表、值列表 keys = list(ori_dict.keys()) values = list(ori_dict.values()) - 按需要互换的索引位置,同步交换键、值列表的对应元素,避免键值绑定关系混乱
# 指定需要交换的两个索引位置,示例中对应原第0位、原第5位 pos_a, pos_b = 0, 5 # 同步交换键、值列表的对应位置元素 keys[pos_a], keys[pos_b] = keys[pos_b], keys[pos_a] values[pos_a], values[pos_b] = values[pos_b], values[pos_a] - 把交换后的键、值重新配对生成新字典,原生字典会自动按传入顺序保留条目位置
final_dict = dict(zip(keys, values))
运行校验:最终生成的
final_dict和预期效果完全匹配:{'F': [2, 6], 'B': [5, 1], 'C': [0, 5], 'D': [1, 3], 'E': [3, 0], 'A': [4, 7], 'G': [7, 2], 'H': [6, 4]}
操作注意事项
- 字典本身不支持直接通过下标索引访问条目,所有位置调整必须通过拆列表的方式完成,直接对字典做下标取数会触发类型错误
- 操作过程中必须同步交换键、值列表的对应位置,仅交换键的位置会出现键与原绑定值错配的问题
- Python 3.6及更早版本场景下,需将最后一步生成字典的代码替换为
final_dict = collections.OrderedDict(zip(keys, values)),才能固定交换后的顺序
内容的提问来源于stack exchange,提问作者Fardin
相关产品推荐
相关产品推荐

