# 可迭代對(duì)象,計(jì)算和排序等處理

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)  # 需要實(shí)例化,因?yàn)榈谝淮斡?jì)算itertools對(duì)象后會(huì)被釋放,從而第二次計(jì)算itertools對(duì)象找不到想要的結(jié)果,而實(shí)例化后不會(huì)
    # operator.itemgetter() 獲取的不是值,而是定義一個(gè)函數(shù),通過該函數(shù)作用到對(duì)象上才能獲取值。
    """
    from operator import itemgetter

    a = [1, 2, 3]
    b = itemgetter(1)       # 定義函數(shù)b,獲取對(duì)象的第1個(gè)值
    c = itemgetter(1, 0)    # 定義函數(shù)c,獲取對(duì)象的第1、0個(gè)值
    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)))

當(dāng)然itemgetter函數(shù)也可以用匿名函數(shù)lambda代替