如何对含多段小数编号的字典列表按sectionnumber正确排序?
如何正确按带层级的数字字符串排序字典列表?
你当前遇到的问题是字符串排序的特性导致的:直接对sectionnumber这类带点分隔的层级字符串排序时,Python会按字符逐个比较,比如'10'的第一个字符'1'比'2'小,所以会排在'2'前面,不符合我们对数字层级的排序预期。
解决方法很简单,把sectionnumber分割成整数列表,用这个列表作为排序的key——整数会按数值大小比较,而非字符顺序:
codelist = sorted(codelist, key=lambda x: list(map(int, x["sectionnumber"].split('.'))))
代码说明:
x["sectionnumber"].split('.'):把层级字符串按.分割成字符串列表,比如'1010.1.9.10'会变成['1010', '1', '9', '10']map(int, ...):把每个字符串元素转成整数,得到[1010, 1, 9, 10]- 排序时会按列表的层级顺序逐个比较数值,最终就能得到符合预期的排序结果:
[{'sectionnumber': '1010.1.9', ...}, {'sectionnumber': '1010.1.9.1', ...}, {'sectionnumber': '1010.1.9.2', ...}, {'sectionnumber': '1010.1.9.10', ...}]
内容的提问来源于stack exchange,提问作者Eric Lin
相关产品推荐
相关产品推荐

