Python--operator库中的attrgetter()和itemgetter()

Python--operator库中的attrgetter()和itemgetter()

原文链接:https://blog.csdn.net/m0_38109046/article/details/85042607

  • operator.attrgetter()

  1. 返回:返回从其操作数获取attr的可调用对象。如果请求多个属性,则返回属性元组。

  2. attrgetter()实现代码:官方标准库3.7
     
    1. def attrgetter(*items):

    2. if any(not isinstance(item, str) for item in items):

    3. raise TypeError('attribute name must be a string')

    4. if len(items) == 1:

    5. attr = items[0]

    6. def g(obj):

    7. return resolve_attr(obj, attr)

    8. else:

    9. def g(obj):

    10. return tuple(resolve_attr(obj, attr) for attr in items)

    11. return g

    12.  
    13. def resolve_attr(obj, attr):

    14. for name in attr.split("."):

    15. obj = getattr(obj, name)

    16. return obj

     

  3. 示例:
     
    1. class Teacher():

    2. def __init__(self, name, salary, age):

    3. self.name = name

    4. self.age = age

    5. self.salary = salary

    6. def __repr__(self):

    7. return repr((self.name,self.age,self.salary))

    8.  
    9. teachers = [

    10. Teacher("A",1200,30),

    11. Teacher("B",1200,31),

    12. Teacher("C",1300,30)

    13. ]

    14.  
    15. from operator import attrgetter

    16. print(sorted(teachers,key=attrgetter("age"))) # 根据age排序

    17. print(sorted(teachers,key=attrgetter("salary","age"))) # 根据salary和age排序

    18.  
    19. 结果:

    20. [('A', 30, 1200), ('C', 30, 1300), ('B', 31, 1200)]

    21. [('A', 30, 1200), ('B', 31, 1200), ('C', 30, 1300)]

     

  •  operator.itemgetter()

  1. 返回一个可调用对象,该对象使用操作数的__getitem __()方法从其操作数中获取项。如果指定了多个项,则返回一个查找值元组。
  2. itemgetter()实现代码:官方标准库3.7
     
    1. def itemgetter(*items):

    2. if len(items) == 1:

    3. item = items[0]

    4. def g(obj):

    5. return obj[item]

    6. else:

    7. def g(obj):

    8. return tuple(obj[item] for item in items)

    9. return g

     

  3.  示例:
     
    1. >>> itemgetter(1)('ABCDEFG')

    2. 'B'

    3. >>> itemgetter(1,3,5)('ABCDEFG')

    4. ('B', 'D', 'F')

    5. >>> itemgetter(slice(2,None))('ABCDEFG')

    6. 'CDEFG'

    7. >>> soldier = dict(rank='captain', name='dotterbart')

    8. >>> itemgetter('rank')(soldier)

    9. 'captain'

    10.  
    11. >>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]

    12. >>> getcount = itemgetter(1)

    13. >>> list(map(getcount, inventory))

    14. [3, 2, 5, 1]

    15. >>> sorted(inventory, key=getcount)

    16. [('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值