itertools.groupby
仅适用于使用与 groupby 相同的键函数排序的列表,如文档 https://docs.python.org/2/library/itertools.html#itertools.groupby -
itertools.groupby(iterable[ key])
创建一个迭代器,从可迭代对象中返回连续的键和组。键是计算每个元素的键值的函数。如果未指定或为 None,则 key 默认为恒等函数并返回未更改的元素。一般来说,可迭代对象需要已经在相同的键函数上进行排序。
所以为了实现你想要的itertools.groupby
,您很可能需要首先根据两者对数据进行排序'Country'
and 'State'
,然后对其进行 groupby 。
另外,在服用时max()
你应该使用'Price'
not 'State'
。例子 -
reader = csv.DictReader(open('/Users/myuser/Downloads/SalesData.csv', 'rU'), dialect='excel')
sortedreader = sorted(reader, key=lambda d: (d['Country'], d['State']))
groups = groupby(sortedreader, key=lambda d: (d['Country'], d['State']))
result = [(k, max(g, key=lambda d: d['Price'])) for k, g in groups]
我将密钥添加到结果中,以识别哪个Country
/State
每个最大值对应。之后你可以迭代result
并打印每个(如果这是您真正想要的)。