
本教程详细介绍了如何在python中对嵌套字典的子字典进行排序,特别是根据其值(列表)是否为空的条件。通过利用python中空列表的布尔特性和`operator.not_`作为排序键,我们能高效地将空列表的键值对移动到排序结果的末尾,从而实现灵活的数据重排。
在处理复杂的数据结构时,我们经常会遇到嵌套字典的情况。例如,一个学生信息字典可能包含多个测试成绩,每个测试成绩又是一个列表。有时,我们希望根据这些列表的特定属性(如是否为空)来重新组织数据。
考虑以下学生测试成绩的嵌套字典结构:
d = {
"Student Id": {
"Name": "student name",
"tests": {
"test1": ["mark", "grade", "time"],
"test2": ["mark", "grade", "time"],
"test3": [], # 这是一个空列表
"test4": ["mark", "grade", "time"]
}
}
}我们的目标是对tests子字典中的键值对进行“排序”,具体来说,是希望将那些值为空列表的键值对移动到该子字典的末尾。例如,上述数据经过处理后,期望得到如下结果:
{
"Student Id": {
"Name": "student name",
"tests": {
"test1": ["mark", "grade", "time"],
"test2": ["mark", "grade", "time"],
"test4": ["mark", "grade", "time"], # 原test4的值现在可能分配给test3
"test3": [] # 原test3的值现在可能分配给test4,空列表在末尾
}
}
}请注意,这里的“排序”不是严格意义上的字典键的字母排序,而是根据值的特性(是否为空)重新分配值到键上,使得空列表的值出现在字典的“逻辑末尾”。具体来说,原始问题期望的是 test3 获得非空列表,而 test4 获得空列表,这意味着键的顺序可能保持不变,但值进行了重新分配。
Python中的空列表([])在布尔上下文中被视为False,而非空列表则被视为True。这一特性为我们的排序提供了一个关键的切入点。我们可以利用operator.not_函数作为sorted()方法的key参数,从而根据列表的空/非空状态进行排序。
operator.not_函数的作用是返回其操作数的逻辑非。
在Python的排序机制中,True通常被视为大于False。因此,当我们使用key=operator.not_对列表进行排序时,空列表(返回True)将排在非空列表(返回False)之后,从而达到将空列表移动到末尾的目的。
芝士饼
芝士饼是一个一站式AI原生应用开发平台,简单几步即可完成应用的创建与发布。
84
查看详情
为了实现对字典值的排序并重新分配给原始键,我们可以采取以下步骤:
下面是具体的Python代码实现:
from operator import not_
# 原始数据结构
d = {
"Student Id": {
"Name": "student name",
"tests": {
"test1": ["mark", "grade", "time"],
"test2": ["mark", "grade", "time"],
"test3": [], # 这是一个空列表
"test4": ["mark", "grade", "time"]
}
}
}
print("原始字典内容:")
print(d['Student Id']['tests'])
# 1. 获取需要排序的子字典
tests_dict = d['Student Id']['tests']
# 2. 提取并排序值
# sorted_values 将包含所有非空列表在前,空列表在后的值列表
# 例如: [['mark', 'grade', 'time'], ['mark', 'grade', 'time'], ['mark', 'grade', 'time'], []]
sorted_values = sorted(tests_dict.values(), key=not_)
# 3. 重新组合键值对并更新字典
# zip(tests_dict, sorted_values) 会将 tests_dict 的键(按其迭代顺序)
# 与 sorted_values 中的值一一对应起来。
# 然后通过 update 方法,将这些新的键值对应用到 tests_dict 上。
# 这会实现值的重新分配,使得空列表的值被分配到字典迭代顺序的最后一个键上。
tests_dict.update(zip(tests_dict, sorted_values))
print("\n排序后(空列表值在末尾)的字典内容:")
print(d['Student Id']['tests'])
# 验证最终的 d 字典
print("\n完整的 d 字典:")
print(d)代码运行结果:
原始字典内容:
{'test1': ['mark', 'grade', 'time'], 'test2': ['mark', 'grade', 'time'], 'test3': [], 'test4': ['mark', 'grade', 'time']}
排序后(空列表值在末尾)的字典内容:
{'test1': ['mark', 'grade', 'time'], 'test2': ['mark', 'grade', 'time'], 'test3': ['mark', 'grade', 'time'], 'test4': []}
完整的 d 字典:
{'Student Id': {'Name': 'student name', 'tests': {'test1': ['mark', 'grade', 'time'], 'test2': ['mark', 'grade', 'time'], 'test3': ['mark', 'grade', 'time'], 'test4': []}}}从结果可以看出,test3现在拥有了非空列表['mark', 'grade', 'time'],而test4则被分配了空列表[],符合我们的预期。
通过上述方法,我们能够灵活高效地对嵌套字典中的子字典进行值重排,特别是在需要将特定属性(如空列表)的数据项移动到末尾的场景中,operator.not_提供了一个简洁而强大的解决方案。
以上就是Python中根据列表是否为空对嵌套字典进行排序的教程的详细内容,更多请关注其它相关文章!
# 几种
# seo优化技术怎么样
# 南充seo优化电话
# 培训公司软文营销推广
# 美发互联网营销推广
# SEO见效时间
# 东平如何选择网站建设
# 万州高效网站建设团队
# 盐城求职网站建设
# 江门网站优化方式有哪些
# 企业智能营销推广目的怎么写
# python
# 这是一个
# 适用于
# 浮点
# 这一
# 芝士
# 布尔
# 数据结构
# 为空
# 键值
# 键值对
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
4399正版网页版入口高清直达链接
如何在vscode中关闭it环境
byrutor直接访问入口 byrutor官方游戏库
小红书如何引流到私信?引流到私信有用吗?
Excel宏怎么删除_Excel中删除宏的详细操作流程
视频号视频怎么提取文案?提取的文案如何优化与使用?
天堂漫画网页版在线阅读 天堂漫画手机版入口
Flexbox布局:实现粘性导航与底部页脚的完美结合
c++如何实现观察者设计模式_c++行为型设计模式实战
Win10如何关闭开机锁屏界面_Windows10跳过锁屏直接登录设置
Safari浏览器自动填表功能失效怎么办 Safari表单管理修复
支付宝登录刷脸不是本人如何解决
PHP中动态类名访问的类实例类型提示与静态分析实践
中通快递官网指定查询 中通快递单号查询平台入口
百度地图离线地图无法加载如何解决 百度地图离线地图加载优化方法
空腹吃苹果好吗 苹果空腹摄入指南
如何在 WordPress 前端实现内容提交:古腾堡编辑器的替代方案与实践
苹果手机手电筒无法开启
Fedora怎么安装 Fedora Workstation安装步骤
word怎么将图片设置为页面背景并不影响打印_Word图片背景设置方法
PointNet++语义分割模型中类别变更引发的断言错误及标签处理策略
win11怎么启用或禁用休眠 Win11 powercfg命令管理休眠文件【技巧】
WooCommerce 新客户订单自动添加管理员备注教程
《百度畅听版》关闭兴趣推荐方法
晨报|开发商暗示《空洞骑士:丝之歌》DLC开发中 《合金装备4》有望重制
解决Go encoding/json 将JSON大数字解析为浮点数的问题
Windows Audio服务启动失败怎么办_电脑没声音的终极服务修复法【修复】
鼠标没反应了怎么办 无线/有线鼠标失灵的解决方法【详解】
WPS文字如何进行简繁转换
漫蛙官网(首页入口)_漫蛙漫画稳定访问教程分享
iPhone 13 mini如何清理Safari缓存_iPhone 13 mini浏览器缓存清理方法
如何外贸网站设计-能留住客户提升用户体验!
《虎扑》取消评分记录方法
Pydantic 中“schema”字段命名冲突的解决方案
PHP odbc_fetch_array 返回值处理:如何正确访问嵌套数组元素
第五人格PC版怎么避免被封号_第五人格PC版防封号注意事项
服装短视频如何起号推广?服装短视频起号推广有什么要求?
C#中的Record类型有什么优势?C# 9新特性Record与Class的用法区别
TikTok网页版入口快速访问 TikTok官网账号登录方法
PHP utf8_encode 字符编码转换疑难解析与最佳实践
支付宝如何解绑云闪付_支付宝与云闪付账户关联解除方法
《爱笔思画x》涂色教程
批改网官网首页登录 批改网学生用户登录入口
飞飞漫画漫画阅读官网_飞飞漫画漫画阅读官网进入阅读
抖音商城官网是什么_抖音商城官方网址与访问方法
《盗墓笔记手游》技能介绍
《崩坏:星穹铁道》3.6版本异相仲裁打法及配队推荐
什么是Satis,如何用它搭建一个私有的composer仓库?
《知到》打卡课程方法
《大周列国志》皇帝律令功能介绍
2025-10-31
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。