如何在Python中删除嵌套字典中的不符合条件项并重排键序
技术百科
碧海醫心
发布时间:2026-01-20
浏览: 次 本文介绍如何在python中筛选嵌套字典(键为整数、值为列表)中满足长度条件的条目,并将剩余条目按顺序重新编号为从0开始的连续整数键。
在处理以整数为键、列表为值的字典时,常需根据值的特征(如长度)进行过滤,并期望结果字典的键保持紧凑、有序(如 0, 1, 2, ...)。直接在遍历中使用 del 删除元素虽可完成过滤,但会留下原始键(如 {1: [...], 2: [...]}),无法自动重编号。
正确做法是:先过滤,再重建。避免在原字典上边遍历边修改带来的索引混乱或 RuntimeError 风险(尤其当字典动态变化时)。推荐使用字典推导式结合 sorted() 和 enumerate() 实现安全、简洁的重排:
a = {0: [1, 2], 1: [3, 4, 5], 2: [6, 7, 8]}
# 步骤1:过滤——仅保留值长度为3的项(注意:不建议在for循环中直接del原字典)
filtered_items = {k: v for k, v in a.items() if len(v) == 3}
# 步骤2:重排键——按原键升序排序后,用enumerate生成新键0, 1, 2...
reordered = {i: v for i, (k, v) in enumerate(sorted(filtered
_items.items()))}
print(reordered) # 输出:{0: [3, 4, 5], 1: [6, 7, 8]}✅ 关键优势:
- 不修改原字典,线程安全且逻辑清晰;
- sorted(filtered_items.items()) 确保按键有序(即使原字典键无序,Python 3.7+ 字典保持插入序,但显式排序更健壮);
- enumerate 自动提供从 0 开始的连续整数键,无需手动计数。
⚠️ 注意事项:
- 切勿在 for k in a: 循环中执行 del a[k] —— 这可能导致跳过元素或 RuntimeError: dictionary changed size during iteration;
- 若原始键非整数或非连续,sorted(a.keys()) 仍能保证重排逻辑一致;
- 如需就地更新原字典,可用 a.clear() 后 a.update(reordered),但通常返回新字典更符合函数式编程习惯。
综上,通过“过滤 → 排序 → 重建”三步法,即可高效、可靠地实现嵌套字典的条件筛选与键序重排。
# python
# 这可
# 推荐使用
# 跳过
# 如需
# 并将
# 循环
# 值为
# 线程
# red
# 遍历
# for
# 仍能
# 升序
# 按原
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- c++输入输出流 c++ cin与cout格式化输
- 如何在 Go 中正确初始化结构体中的 map 字段
- 如何自定义Windows终端的默认配置文件?(Po
- 微信短链接怎么还原php_用浏览器开发者工具抓包获
- Win11怎么把图标拖到任务栏_Win11固定应用
- Python装饰器设计思路_功能增强机制说明【指导
- LINUX怎么设置系统语言_LINUX修改中文环境
- Python抽象类与接口设计_规范说明【指导】
- php中::能用于接口静态方法吗_接口静态方法调用
- Win11 explorer.exe频繁崩溃_修复
- Win11怎么设置应用分屏_Windows11贴靠
- c# 在高并发下使用反射发射(Reflection
- VSC怎么创建PHP项目_从零开始搭建项目的步骤【
- c++如何判断文件是否存在_c++ filesys
- PythonPandas数据分析教程_数据清洗与处
- 如何在 Go 开发中正确处理本地包导入与远程模块路
- 如何使用Golang编写单元测试_创建Test函数
- 如何将竖排文本文件转换为横排字符串
- ACF 教程:如何正确更新嵌套在多层 Group
- 如何在 Go 中高效缓存与分发网络视频流
- 如何关闭Win10自动更新更新_Win10系统自动
- Win10电脑怎么设置IP地址_Windows10
- C++如何使用Qt创建第一个GUI窗口?(入门教程
- Win11如何设置系统语言_Win11系统语言切换
- Mac如何彻底清理浏览器缓存?(Safari与Ch
- PHP主流架构怎么监控运行状态_工具推荐【操作】
- Windows7怎么找回经典开始菜单_Window
- TestNG的testng.xml配置文件怎么写
- Python生成器表达式内存优化_惰性计算说明【指
- Win10如何备份注册表_Win10注册表备份步骤
- Python技术债务管理_长期维护解析【教程】
- Win11怎么设置虚拟内存最佳大小_Windows
- Mac怎么查看活动监视器_理解Mac进程和资源占用
- php做exe支持多线程吗_并发处理实现方式【详解
- Windows 11如何查看系统激活密钥_Wind
- Mac如何整理桌面文件_Mac使用堆栈功能一键整理
- Win11更新后变慢怎么办_Win11系统更新后卡
- mac怎么安装字体_MAC添加第三方字体与字体册管
- 如何使用正则表达式批量替换重复的 *- 模式为固定
- Win11怎么更改任务栏位置_修改注册表将Win1
- Win11视频默认播放器怎么改_Win11关联第三
- 如何使用Golang安装API文档生成工具_快速生
- php后缀怎么变mp4能播放_让php伪装mp4正
- c++中explicit(bool)的用法 c++
- c++中如何使用auto关键字_c++11类型推导
- Windows 10怎么隐藏特定更新补丁_Wind
- Win11如何设置开机问候语 Win11修改登录界
- 如何在 Go 同包不同文件中正确引用结构体
- 如何在Windows中创建新的用户账户?(标准与管
- 如何使用Golang实现微服务状态监控_Golan


QQ客服