zoukankan      html  css  js  c++  java
  • 在python中对元祖进行排序

    在python里你可以对一个元组进行排序。例子是最好的说明:

    >>> items = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
    >>> sorted(items)
    [(0, 'B'), (0, 'a'), (1, 'A'), (1, 'B'), (2, 'A')]
    

    默认情况下内置的sortsorted函数接收的参数是元组时,他将会先按元组的第一个元素进行排序再按第二个元素进行排序。 然而,注意到结果中(0, 'B’)(0, 'a')的前面。这是因为大写字母B的ASCII编码比a小。然而,假设你想要一些更人性的排序并且不关注大小写。你或许会这么做:

    >>> sorted(items, key=str.lower)
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: descriptor 'lower' requires a 'str' object but received a 'tuple'
    

    我们将会得到一个错误,因为他不能正确处理元组的第一部分。(注:原文作者估计想说元组中第一项是数字,不能使用lower这个方法;正确的原因提示的很明显了,是因为你传递的是一个元组,而元组是没有lower这个方法的)

    我们可以试着写一个lambda函数(eg.sorted(items, key=lambda x: x.lower() if isinstance(x, str) else x)),他将不会工作因为你只处理了元组的一个元素。(注:同上面,作者这么做必然是错的,思考给这个lambda传一个元组,返回的是什么?)

    言归正传,下面就是你应该怎么做的方法。一个lambda,它会返回一个元组:

    >>> sorted(items, key=lambda x: (x[0], x[1].lower()))
    [(0, 'a'), (0, 'B'), (1, 'A'), (1, 'B'), (2, 'A')]

    我确信你知道你可以倒序排列,仅仅使用sorted(items, reverse=True, …),但是你怎么根据关键字来进行不同的排序?

    使用lambda函数返回元组的技巧,下面是一个我们排序一个稍微高级的数据结构:

    >>> peeps = [{'name': 'Bill', 'salary': 1000}, {'name': 'Bill', 'salary': 500}, {'name': 'Ted', 'salary': 500}]
    

    现在,使用lambda函数返回一个元组的特性来排序:

    >>> sorted(peeps, key=lambda x: (x['name'], x['salary']))
    [{'salary': 500, 'name': 'Bill'}, {'salary': 1000, 'name': 'Bill'}, {'salary': 500, 'name': 'Ted'}]
    

    很有意思,对吧?Bill 在Ted的前面,并且500在1000的前面。但是如何在相同的 name 下,对 salary 反向排序?很简单,对它取反:

    >>> sorted(peeps, key=lambda x: (x['name'], -x['salary']))
    [{'salary': 1000, 'name': 'Bill'}, {'salary': 500, 'name': 'Bill'}, {'salary': 500, 'name': 'Ted'}]
  • 相关阅读:
    Jenkins-在windows上配置自动化部署(Jenkins+Gitblit)
    GIT-Linux(CentOS7)系统部署GitLab服务器
    VMware 安装Linux系统 CentOS
    GIT-windows系统下Gitblit的使用方式
    SQL 显示所有表所占存储空间
    通过JavaScript更新UpdatePanel备忘
    Entity Framework调用表值函数实现全文检索?
    转载:javascript 拖拽排序,简洁示例备忘
    c++ 读写注册表
    MSSQL中建立分区表(转载备忘)
  • 原文地址:https://www.cnblogs.com/ellisonzhang/p/10359057.html
Copyright © 2011-2022 走看看