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

删除中间条目后,如何重新索引Python字典使其键连续?

解决Python字典删除键后重新生成连续索引键的问题

直接遍历字典的.keys()并修改键会出问题——因为迭代字典时修改其结构(增删键)会触发异常或遍历异常。正确的做法是重新构建字典,给值分配连续的索引键,以下是两种可靠方法:

方法一:利用字典值直接重建(Python 3.7+适用)

Python 3.7及以上的字典会保留插入顺序,直接用enumerate遍历字典的.values(),给每个值分配新的连续索引:

# 删除键后的字典
my_dict = {
    0: {"item_one": "a", "item_two": "b"},
    2: {"item_one": "e", "item_two": "f"}
}

# 重建字典,生成连续索引键
my_dict = {i: val for i, val in enumerate(my_dict.values())}

# 输出结果:{0: {'item_one': 'a', 'item_two': 'b'}, 1: {'item_one': 'e', 'item_two': 'f'}}
print(my_dict)

方法二:兼容旧版本Python(低于3.7)

旧版本字典不保证顺序,需要先对原键排序,再按排序后的键取值重建:

# 删除键后的字典
my_dict = {
    0: {"item_one": "a", "item_two": "b"},
    2: {"item_one": "e", "item_two": "f"}
}

# 先排序原字典的键,再分配新索引
sorted_keys = sorted(my_dict.keys())
my_dict = {i: my_dict[key] for i, key in enumerate(sorted_keys)}

# 输出结果同上
print(my_dict)

为什么直接修改键会失败?

当你遍历.keys()时,字典的键集合是动态的。如果在遍历过程中删除旧键、添加新键,会打乱迭代器的状态,要么跳过元素,要么直接抛出RuntimeError: dictionary changed size during iteration异常。所以必须先获取所有需要保留的值(或排序后的键值对),再重新构建新字典。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:35:08