本文介绍如何在python中筛选嵌套字典(如按值长度过滤),安全删除不满足条件的键值对,并将剩余条目按顺序重映射为从0开始的连续整数键。
在处理结构化字典数据时,常需根据值的特征(例如列表长度)进行筛选,并期望结果具有紧凑、有序的整数键(如 0, 1, 2...),而非保留原始稀疏或不规则的键。直接在遍历中修改字典(如使用 del a[i])虽可行,但存在风险:若键非连续整数或遍历时发生键变化,可能引发 KeyError 或逻辑遗漏。更健壮、清晰的做法是分离“筛选”与“重索引”两个步骤。
首先,我们提取所有满足条件的值(例如 len(value) == 3),然后用 enumerate() 为其生成新键:
a = {0: [1, 2], 1: [3, 4, 5], 2: [6, 7, 8]}
# 步骤1:筛选符合条件的值(推荐:不修改原字典,避免副作用)
filtered_values = [v for v in a.values() 
if len(v) == 3]
# 步骤2:用enumerate重建从0开始的连续键字典
reordered = {i: v for i, v in enumerate(filtered_values)}
print(reordered) # 输出: {0: [3, 4, 5], 1: [6, 7, 8]}✅ 该方法优势明显:
⚠️ 注意事项:
总结:重编号字典键的本质是「构造新映射」,而非「重排旧键」。坚持“筛选→重建”范式,代码更可靠、易维护,也符合函数式编程的不变性原则。