# 可迭代对象,计算和排序等处理
from itertools import groupby
from operator import itemgetter
L = [('grape', 100, 2), ('grape', 3, 2), ('apple', 15, 2), ('apple', 10, 2), ('apple', 4, 2), ('banana', 3, 2)]
for x, y in groupby(L, itemgetter(0)):
inst_y = list(y) # 需要实例化,因为第一次计算itertools对象后会被释放,从而第二次计算itertools对象找不到想要的结果,而实例化后不会
# operator.itemgetter() 获取的不是值,而是定义一个函数,通过该函数作用到对象上才能获取值。
"""
from operator import itemgetter
a = [1, 2, 3]
b = itemgetter(1) # 定义函数b,获取对象的第1个值
c = itemgetter(1, 0) # 定义函数c,获取对象的第1、0个值
print(b(a)) 2
print(c(a)) (2, 1)
a = {'name': 'wangke', 'age':18, 'sex': 'man'}
b = itemgetter('age')
c = itemgetter('name', 'age')
print(b(a)) 18
print(c(a)) ('wangke', 18)
"""
print(sum(map(itemgetter(1), inst_y)))
print(sum(map(itemgetter(2), inst_y)))
当然itemgetter函数也可以用匿名函数lambda代替
浙公网安备 33010602011771号