【问题标题】:itertools.groupby returns empty list items, when populated with operator.itemgetter [duplicate]itertools.groupby 在使用 operator.itemgetter [重复] 填充时返回空列表项
【发布时间】:2014-02-12 21:18:34
【问题描述】:

我正在尝试使用函数 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)])]

有人可以找出问题所在吗?

【问题讨论】:

    标签: python operator-keyword itertools


    【解决方案1】:

    不要在 groupby 迭代器上调用 list()

    #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]
    

    来自itertools.groupby() documentation

    返回的组本身是一个迭代器,它与groupby() 共享底层迭代。因为源是共享的,所以当groupby() 对象被推进时,之前的组不再可见。

    groupby() 的输出转换为列表会推进groupby() 对象。

    【讨论】:

      猜你喜欢
      • 2021-10-04
      • 1970-01-01
      • 2023-02-03
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多