zoukankan      html  css  js  c++  java
  • Python: attrgetter()函数: 排序不支持原生比较的对象

    问题: 想排序类型相同的对象,但是他们不支持原生的比较操作。

    answer: 

      内置的sorted()函数有一个关键字参数key,可传入一个callable对象给它

      这个callabel对象对每个传入的对象返回一个值,这个值被sorted()用来排序这些对象

    eg:

      1.lambda 函数 

      有一个User 实例序列,希望通过他们的user id 属性进行排序,可提供一个以User 实例作为输入并输出对应user id 值的callable 对象

      class User:
        def __init__(self, user_id):
          self.user_id = user_id
        def __repr__(self):
          return 'User({})'.format(self.user_id)


      def sort_notcompare():
        users = [User(23), User(3), User(99)]
        print(users)
        print(sorted(users, key=lambda u: u.user_id))


    2.operator.attrgetter()
      另外一种方式是使用operator.attrgetter() 来代替lambda 函数:
      >>> from operator import attrgetter
      >>> sorted(users, key=attrgetter('user_id'))
      [User(3), User(23), User(99)]

        attrgetter() 函数通常会运行的快点,并且还能同时允许多个字段进行比较。

        如果User 实例还有一个first name 和last name 属性排序,
        >>>by_name = sorted(users, key=attrgetter('last_name', 'first_name'))

      3.min() 和max()

    适用于像min() 和max() 之类的函数。
    >>> min(users, key=attrgetter('user_id')
    User(3)
    >>> max(users, key=attrgetter('user_id')
    User(99)

  • 相关阅读:
    POJ 2342 树形DP入门题
    《4》CentOS7.0+OpenStack+kvm云平台部署—配置Nova
    GDI+ 填充背景时,非常多时候不起作用,GDI、GDI+配合运用
    Jave中System.getProperty()获取的值
    NYOJ128 前缀式计算(栈的运用)
    Web安全測试二步走
    一个SQL update语句
    C#时间格式之GMT时间的格式
    粘包的处理
    socket对于大数据的发送和接收
  • 原文地址:https://www.cnblogs.com/baxianhua/p/8184881.html
Copyright © 2011-2022 走看看