通过一个列表给另外一个列表排序

通过一个列表中的顺序,给另外一个列表,或者对象排序,代码如下

results = [
{'a': 'FF'},
{'a': None},
{'a': 'BS'},
{'a': 'TF'},
{'a': 'BF'},
{'a': 'TS'},
{'a': 'BS'},
]


    enums = ['FF', 'TF', 'BF', 'TS', 'TB', 'BS', None] colorMap = {c: i for i, c in enumerate(enums)} results = sorted(results, key=lambda tup: colorMap.get(tup['a'], 1))


结果为
[{'a': 'FF'}, {'a': 'TF'}, {'a': 'BF'}, {'a': 'TS'}, {'a': 'BS'}, {'a': 'BS'}, {'a': None}]

原理如下:

1.使用枚举将列表转化为枚举类型
pp = enumerate(enums)
for i in pp:
   print(i)

结果如下:

(0, 'FF')
(1, 'TF')
(2, 'BF')
(3, 'TS')
(4, 'TB')
(5, 'BS')
(6, None)

2.使用字典生成式,将枚举转化为字典,以枚举的名称作为字典的key值,以枚举的值作为字典的value值
得到一个如下的字典
{'FF': 0, 'TF': 1, 'BF': 2, 'TS': 3, 'TB': 4, 'BS': 5, None: 6}

3.再通过sorted排序
results = sorted(results, key=lambda tup: colorMap.get(tup['category'], 1))

sorted函数,第一个参数是一个可迭代对象,第二个参数key,是可迭代对象来比较的值,通过方法,将对象中的key取出来进行比对。


相关知识点:

枚举

什么是枚举?

枚举类型是一中数据类型,是一些列的常量集合

枚举类型列出所有可能的取值,枚举类型的取值不能超出定义的范围。

如何使用枚举?

 1.定义枚举时,成员变量不能重复

 2.成员变量值相同,第二个成员是第一个成员的别名,输出的结果均是第一个成员

 3 成员变量要唯一,不能重复,可使用@unique

枚举取值

枚举每个成员都有名称和值

 也可以通过迭代的方式遍历成员

 __members__特殊属性,可以将成员名称与成员值一一映射

 枚举类型的特点

枚举类型不能用=赋值符号进行赋值

(1)枚举类型不能用=赋值符号进行赋值

              enum weekday {sun, mou, tue, wed, thu, fri, sat } ;

              sun=5;这是错误的

      (2)枚举成员本身就有一个序号值,默认从0开始,即0,1,2...

               但定义时,也可以自己改变序号值,举例: enum weekday {sun=7, mou, tue, wed, thu, fri, sat } ;

               那么序号值是7,8...逐渐+1

匿名函数lambda

原文地址:https://www.cnblogs.com/ltyc/p/15193823.html