zoukankan      html  css  js  c++  java
  • python基础 列表sort妙用

    相信大家在使用列表时都使用过sort或sorted函数,再温习一下

    sort语法:

    list.sort( key=None, reverse=False)

    需要注意的是: 是在原列表上直接排序,返回为None

    还有一个key的使用如下:

    如下:

    ff = [{'age': 20, 'name': 'abc'}, {'age': 25, 'name': 'ghi'}, {'age': 30, 'name': 'def'}] 
    ff.sort(fkey=lambda x:x['age'], reverse=True)

    结果如下:

    [{'age': 30, 'name': 'def'}, {'age': 25, 'name': 'ghi'}, {'age': 20, 'name': 'abc'}]

    那么,问题来了

    需求是这样:按age逆序排序,如果age相同的情况下,再按name的字母ASCII排序。

    怎么做呢,我们需要考虑两点,这里有两重排序,去看看sort支不支持,

    官方文档及How Tos也没介绍怎么做

    我们试试看

    重新定义数据:

    ff = [{'age': 20, 'name': 'abc'}, {'age': 25, 'name': 'ghi'}, {'age': 30, 'name': 'def'}, {'age':20, 'name':'bcd'}]
    
    ff.sort(key=lambda x:(x['age'], x['name']), reverse=True)

    结果如下:

    [{'age': 30, 'name': 'def'}, {'age': 25, 'name': 'ghi'}, {'age': 20, 'name': 'bcd'}, {'age': 20, 'name': 'abc'}]

    可以!!!!

    但是:我们需求是age逆序排序,age相同情况下,按名字排序。在查看相关文档后,发现reverse不能放在key内部....

    解决方案:这时我们可以换个思路考虑,age是正数,我们为何不在排序时把age搞成负数,reverse为正序,不就可以正好解决问题。

    如下:

    ff.sort(key=lambda x:(-x['age'], x['name']))

    结果:

    [{'age': 30, 'name': 'def'}, {'age': 25, 'name': 'ghi'}, {'age': 20, 'name': 'abc'}, {'age': 20, 'name': 'bcd'}]

    很好。解决问题。一个小小的负号。不需要自己再去重写sort。

    Email:362299908@qq.com
  • 相关阅读:
    ffmpeg h264编码 extradata 为空
    MySQL主从复制报错一致性问题解决
    MySQL 子查询优化案例
    RAC+单节点搭建DG
    总结搭建Oracle11g DG踩的坑
    解决开机自动调用脚本失败的问题
    MySQL版本升级之5.6到5.7
    MySQL 通过semi join 优化子查询
    MySQL 配置文件中忘配置default-character-set引发的乱码问题
    MySQL5.6下使用xtrabackup部分备份恢复到MySQL5.7
  • 原文地址:https://www.cnblogs.com/landhu/p/15562404.html
Copyright © 2011-2022 走看看