python - 根据 len 和 int 对字符串数据进行排序
问题描述
我有一个字典列表,如下所示,我想根据“d”作为字符串按排序顺序对数据进行排序。
src_dict_list=[{'a':'a1','b':'b1','c':'c1','d':'1000-22'},
{'a':'a1','b':'b1','c':'c1','d':'1000-18'},
{'a':'a1','b':'b1','c':'c1','d':'1000-11144'},
{'a':'a1','b':'b1','c':'c1','d':'1000-11146'},
{'a':'a1','b':'b1','c':'c1','d':'1000-11149'},
{'a':'a1','b':'b1','c':'c1','d':'1000-11148'}]
这里 d 值被视为字符串,所以我尝试使用 len 但我希望数据也按数值排序。
代码:
print(sorted(src_dict_list,key=lambda k:len(k['d'])))
输出:
[{'a': 'a1', 'b': 'b1', 'c': 'c1', 'd': '1000-22'},
{'a': 'a1', 'b': 'b1', 'c': 'c1', 'd': '1000-18'},
{'a': 'a1', 'b': 'b1', 'c': 'c1', 'd': '1000-11144'},
{'a': 'a1', 'b': 'b1', 'c': 'c1', 'd': '1000-11146'},
{'a': 'a1', 'b': 'b1', 'c': 'c1', 'd': '1000-11149'},
{'a': 'a1', 'b': 'b1', 'c': 'c1', 'd': '1000-11148'}]
预期的:
[{'a': 'a1', 'b': 'b1', 'c': 'c1', 'd': '1000-18'},
{'a': 'a1', 'b': 'b1', 'c': 'c1', 'd': '1000-22'},
{'a': 'a1', 'b': 'b1', 'c': 'c1', 'd': '1000-11144'},
{'a': 'a1', 'b': 'b1', 'c': 'c1', 'd': '1000-11146'},
{'a': 'a1', 'b': 'b1', 'c': 'c1', 'd': '1000-11148'},
{'a': 'a1', 'b': 'b1', 'c': 'c1', 'd': '1000-11149'}]
你能帮我么?
解决方案
听起来您想根据 d 字符串中整数的词法顺序进行排序。就像是:
sorter = lambda k : list(map(int,k['d'].split('-')))
print(sorted(src_dict_list,key=sorter))
推荐阅读
- vb.net - 分阶段网站目录/文件夹名称 vb.net
- r - ggplot添加多边形
- sql - 计算不同和非不同 ID 编号的布尔值
- javascript - 对于即将从 GET 响应接收其值的属性,我应该使用 Undefined 或 Null 作为默认值吗?
- javascript - 当纸张调整大小时,如何保持元素的原始大小并将它们保留在纸张内?
- cytoscape.js - 使用 popper 和 tippy 在 Cytoscape 节点标签上创建工具提示
- c# - 如何使用方法语法在 LINQ 连接中添加多个条件
- flutter - 如何在颤动时将上传的图像列表上传到 Firestore?
- python - 漂亮的打印数据类更漂亮
- python - Dask:为什么内存使用量会激增?