Python中的itertools.groupby存在的问题

时间:2015-12-04 10:40:15

标签: python

为什么以下代码会返回两个 False 对?

from itertools import groupby

content = '1\t2\t3\n4\t5\t\n7\t8\t9'

result = groupby((line.split('\t') for line in content.splitlines()),
                 key=lambda x: x[2] == '')

for k, v in result:
    print '--->', k, id(k)
    print list(v)

结果如下所示

---> False 505954168
[['1', '2', '3']]
---> True 505954192
[['4', '5', '']]
---> False 505954168
[['7', '8', '9']]

1 个答案:

答案 0 :(得分:4)

itertools.groupby

  

创建一个迭代器,从中返回连续的键和组   迭代。 ... 每次键函数的值发生变化时都会产生中断或新组(这就是为什么通常需要使用相同的键函数对数据进行排序)。

强调补充。

您需要对输入进行排序

genexp = (line.split('\t') for line in content.splitlines())
key = lambda x: x[2] == ''

result = groupby(sorted(genexp, key=key), key=key) # Note: same key function

或编写自己的分组功能。坦白说,这并不难:

from collections import defaultdict
dd = defaultdict(list)
for x in genexp:
    dd[key(x)].append(x)
result = dd.items()
相关问题