通过一个列表中的顺序,给另外一个列表,或者对象排序,代码如下
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