首页 > 解决方案 > 根据 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'}]

你能帮我么?

标签: pythonlistdictionary

解决方案


听起来您想根据 d 字符串中整数的词法顺序进行排序。就像是:

sorter = lambda k : list(map(int,k['d'].split('-')))
print(sorted(src_dict_list,key=sorter))

推荐阅读