# 可迭代对象,计算和排序等处理

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代替