zoukankan      html  css  js  c++  java
  • python sorted排序小结

    转载至:
    https://blog.csdn.net/ray_up/article/details/42084863

    在python中排序有两个专用函数,一个是sort,另一个sorted。其中sort是列表专用排序函数,sorted是所有可迭代对象都能使用的排序函数。

    列表排序

    按照字母排序

    a = ['USA', 'China', 'Canada', 'Russia']
    a.sort(reverse=True)
    

    结果:
    ['USA', 'Russia', 'China', 'Canada']

    嵌套列表的排序, 按照子列表的其他值排序, 修改x[0] 这里的下标即可

    a = [['USA', 'b'], ['China', 'c'], ['Canada', 'd'], ['Russia', 'a']]
    a.sort(key=lambda x: x[0], reverse=True)
    

    结果:
    [['USA', 'b'], ['Russia', 'a'], ['China', 'c'], ['Canada', 'd']]

    嵌套字典, 按照字典值(value) 排序

    a = [{'letter': 'b'}, {'letter': 'c'}, {'letter': 'd'}, {'letter': 'a'}]
    a.sort(key=lambda x: x['letter'], reverse=True)
    

    结果:
    [{'letter': 'd'}, {'letter': 'c'}, {'letter': 'b'}, {'letter': 'a'}]

    当字典值也是字典时, 这时候会优先按照键名排序, 再按照键值排序. 例子如下

    a = [{'letter': {'a': 'b'}}, {'letter': {'a': 'c'}}, {'letter': {'a': 'd'}}, {'letter': {'a': 'a'}}]
    a.sort(key=lambda x: x['letter'], reverse=True)
    

    结果:
    [{'letter': {'a': 'd'}}, {'letter': {'a': 'c'}}, {'letter': {'a': 'b'}}, {'letter': {'a': 'a'}}]

    a = [{'letter': {'a': 'b'}}, {'letter': {'b': 'c'}}, {'letter': {'c': 'd'}}, {'letter': {'d': 'a'}}]
    a.sort(key=lambda x: x['letter'], reverse=True)
    

    结果:
    [{'letter': {'d': 'a'}}, {'letter': {'c': 'd'}}, {'letter': {'b': 'c'}}, {'letter': {'a': 'b'}}]


    字典排序

    解析: 字典排序可以有多种方法,直接对字典排序会变成对key排序,也可以将字典转化成元祖排序。

    使用字典直接排序

    直接使用sorted对字典排序,所排序的是字典的key,输出也是排序好的key值。

    a = {'a': 'China', 'c': 'USA', 'b': 'Russia', 'd': 'Canada'}
    b = sorted(a, reverse=True)
    

    结果:
    ['a', 'b', 'c', 'd']

    按照键值(value)排序

    将字典转化成元祖排序。排序函数中传入的是a.items(),即元祖

    a = {'a': 'China', 'c': 'USA', 'b': 'Russia', 'd': 'Canada'}
    b = sorted(a.items(), key=lambda x: x[1], reverse=True)
    

    结果:

    [('d', 'Canada'), ('a', 'China'), ('b', 'Russia'), ('c', 'USA')]
    
    

    按照键名(key)排序

    a = {'a': 'China', 'c': 'USA', 'b': 'Russia', 'd': 'Canada'}
    b = sorted(a.items(), key=lambda x: x[0])
    

    结果:
    [('d', 'Canada'), ('c', 'USA'), ('b', 'Russia'), ('a', 'China')]

    嵌套字典, 按照字典键名(key)排序

    a = {'a': {'b': 'China'}, 'c': {'d': 'USA'}, 'b': {'c': 'Russia'}, 'd': {'a': 'Canada'}}
    b = sorted(a.items(), key=lambda x: x[1])
    

    结果:
    [('d', {'a': 'Canada'}), ('a', {'b': 'China'}), ('b', {'c': 'Russia'}), ('c', {'d': 'USA'})]

    嵌套列表, 针对列表第一个元素排序( 其实直接写 x: x[1] 就是按照第一个值排序. )

    a = {'a': [1, 3], 'c': [3, 4], 'b': [0, 2], 'd': [2, 1]}
    b = sorted(a.items(), key=lambda x: x[1][0])
    

    结果:
    [('b', [0, 2]), ('a', [1, 3]), ('d', [2, 1]), ('c', [3, 4])]

    嵌套列表, 按照列表其他元素排序 只需要修改列表对应的下标

    a = {'a': [1, 3], 'c': [3, 4], 'b': [0, 2], 'd': [2, 1]}
    b = sorted(a.items(), key=lambda x: x[1][1])
    

    结果:
    [('d', [2, 1]), ('b', [0, 2]), ('a', [1, 3]), ('c', [3, 4])]


    总结: 此处使用lambda方法, x: x[1][1] 就可以看做是在访问字典的值, 想要按照哪个数值排序, 用相应的坐标对应即可, 但当字典过于复杂后, 应该选择用元组存储, 简化排序过程.

  • 相关阅读:
    RabbitMQ实战(文摘)
    dex2jar 和 jd-gui 的安装与使用(转)
    asp.net core跨平台开发从入门到实战文摘
    hashCode() 和equals() 区别和作用(转)
    B+树和LSM比较(转)
    C#并发集合(转)
    文档docsify
    如何熟悉一个系统?(内含知识大图)
    新浪微博应对弹性扩容的架构演进
    iftop非交互式监控流量来源和去向
  • 原文地址:https://www.cnblogs.com/goldsunshine/p/12855560.html
Copyright © 2011-2022 走看看