# 可迭代对象,计算和排序等处理 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代替