我正在尝试使用函数groupby和itemgetter,以便将已排序的元组列表重新排列为组。
from itertools import groupby
from operator import itemgetter
#initialize a list of tuples
indexed_qualityresults = [(u'moses-R4', 2.0), (u'moses-R4', 3.0), (u'lucy-R4', 3.0), (u'trados-R4', 2.0)]
#group tuples, using as a key the first element of each tuple
groupped_qualityresults = list(groupby(indexed_qualityresults, itemgetter(0)))
#print the key and the respective grouped tuples for each group
print "groupped_qualityresults =", [(a,list(b)) for a,b in groupped_qualityresults]输出是
groupped_qualityresults = [(u'moses-R4', []), (u'lucy-R4', []), (u'trados-R4', [(u'trados-R4', 2.0)])]正如您所看到的,那么返回的tmy原始元组列表的两个第一个键是空的,尽管它们不应该是空的。
预期产出:
groupped_qualityresults = [(u'moses-R4', [(u'moses-R4', 2.0), (u'moses-R4', 3.0)]), (u'lucy-R4', [(u'lucy-R4', 3.0)]), (u'trados-R4', [(u'trados-R4', 2.0)])]有人能发现出什么问题了吗?
发布于 2014-01-22 17:07:13
不要在list()迭代器上调用groupby:
#group tuples, using as a key the first element of each tuple
groupped_qualityresults = groupby(indexed_qualityresults, itemgetter(0))
#print the key and the respective grouped tuples for each group
print "groupped_qualityresults =", [(a,list(b)) for a,b in groupped_qualityresults]来自 documentation
返回的组本身就是一个迭代器,它与
groupby()共享底层迭代。因为源是共享的,所以当groupby()对象被高级时,前面的组不再可见。
将groupby()的输出转换为列表将推进groupby()对象。
https://stackoverflow.com/questions/21289315
复制相似问题