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


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

    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

  • 相关阅读:
    springboot文件上传: 单个文件上传 和 多个文件上传
    Eclipse:很不错的插件-devStyle,将你的eclipse变成idea风格
    springboot项目搭建:结构和入门程序
    POJ 3169 Layout 差分约束系统
    POJ 3723 Conscription 最小生成树
    POJ 3255 Roadblocks 次短路
    UVA 11367 Full Tank? 最短路
    UVA 10269 Adventure of Super Mario 最短路
    UVA 10603 Fill 最短路
    POJ 2431 Expedition 优先队列
  • 原文地址:https://www.cnblogs.com/ltyc/p/15193823.html
Copyright © 2020-2023  润新知