• 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)

  • 相关阅读:
    JSON的基本认识
    Linux基础 7-10 Bash编程练习4--for循环
    Linux基础7-9 Bash编程--for循环语句
    linux基础 7-3-条件判断语句案例
    Linux基础 7-8 sed命令使用练习
    Linux基础 7-7 set命令的使用
    Linux基础 7-6 Bash脚本编程练习3
    Linux基础7-5 Bash脚本编程--算术运算
    Linux基础7-4 Bash脚本编程练习2
    Linux基础 7-3 Bash脚本编程--条件判断
  • 原文地址:https://www.cnblogs.com/baxianhua/p/8184881.html
Copyright © 2020-2023  润新知