为什么以下代码会返回两个 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']]
答案 0 :(得分:4)
创建一个迭代器,从中返回连续的键和组 迭代。 ... 每次键函数的值发生变化时都会产生中断或新组(这就是为什么通常需要使用相同的键函数对数据进行排序)。
强调补充。
您需要对输入进行排序
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()