如何基于级联列表值对Python OrderedDict进行多级排序
OrderedDict 多优先级排序实现方案
直接使用Python内置的sorted()函数即可实现多维度级联排序,无需编写复杂的嵌套循环逻辑:
from collections import OrderedDict myOD = OrderedDict( adultMale1=[50, 'male', 'grey'], babyFemale=[1, 'female', 'red'], teenMale=[13, 'male', 'blonde'], teenFemale=[13, 'female', 'red'], adultMale2=[50, 'male', 'blonde'] ) # 按(年龄升序 > 性别升序 > 发色升序)优先级排序 sorted_items = sorted(myOD.items(), key=lambda x: (x[1][0], x[1][1], x[1][2])) myNewOD = OrderedDict(sorted_items) print myNewOD.keys() # 输出结果:['babyFemale', 'teenFemale', 'teenMale', 'adultMale2', 'adultMale1']
原理解释
sorted()的key参数接受元组类型的返回值,排序时会按元组元素顺序依次比对,优先级和元组的元素顺序完全对应,刚好匹配你的多优先级需求- 字符串默认按ASCII编码顺序升序排列,
female排序优先级高于male,blonde排序优先级高于grey,和你期望的排序结果一致
如果需要调整某一维度为降序,数值类型可以直接在对应字段前加负号,例如要按年龄降序排序,可以修改key为lambda x: (-x[1][0], x[1][1], x[1][2])。
内容的提问来源于stack exchange,提问作者Tarmy
相关产品推荐
相关产品推荐

