首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用itertools.groupby填充时,operator.itemgetter返回空列表项

当使用itertools.groupby填充时,operator.itemgetter返回空列表项
EN

Stack Overflow用户
提问于 2014-01-22 17:04:51
回答 1查看 557关注 0票数 1

我正在尝试使用函数groupby和itemgetter,以便将已排序的元组列表重新排列为组。

代码语言:javascript
复制
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]

输出是

代码语言:javascript
复制
groupped_qualityresults = [(u'moses-R4', []), (u'lucy-R4', []), (u'trados-R4', [(u'trados-R4', 2.0)])]

正如您所看到的,那么返回的tmy原始元组列表的两个第一个键是空的,尽管它们不应该是空的。

预期产出:

代码语言:javascript
复制
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)])]

有人能发现出什么问题了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-22 17:07:13

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

代码语言:javascript
复制
#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()对象。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21289315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档