今天看书的时候看到这个,感觉还行。
大致总结一下,itemgetter 是以index的形势来获取相对应的值。
attrgetter是用 key来获取相对应的值。我个人觉得attrgetter比itemgetter功能强大在可以嵌套的提取元素,具体看代码。
其中 namedtuple是继承自tuple的子类。namedtuple创建一个和tuple类似的对象,而且对象拥有可访问的属性。
(见识短浅,假如有不足或者错误的地方,希望大佬指正)
具体看代码。
# *_*coding:utf-8 *_*
from operator import itemgetter, attrgetter
# ----A-------B---C----D---
data = [
('老王', 18, 175, 75),
('阿汤哥', 15, 165, 70),
('罗宾森', 23, 180, 100),
('小风', 10, 171, 60),
('黄佬', 20, 175, 65),
]
"""itemgetter,它构建的函数会返回提取的值构成的元组"""
get_c_d = itemgetter(2, 3)
for value in data:
print(get_c_d(value))
print("-------------------------------------")
# 表示根据 C,D 来进行排序
for value in sorted(data, key=itemgetter(2, 3)):
print(value)
print("-------------------------------------")
from collections import namedtuple
size = namedtuple('size', 'height weight')
stu = namedtuple('stu', 'name age size')
data_stu = [stu(name, age, size(height, weight)) for name, age, height, weight in data]
"""用attrgetter来处理 主要用于嵌套的东西吧"""
get_name_age = attrgetter('name','size.height')
for value in sorted(data_stu,key=attrgetter('size.height')):
print(get_name_age(value))
print("-------------------------------------")