使用Spark一段时间后,尝试在普通Python中使用groupby()似乎不必要复杂
我使用此代码
([ (k,list(v))
for k,v in itertools.groupby(
sorted(
data
,key=itemgetter(0))
,key=itemgetter(0))]
)
如果不首先对数据进行排序,则会给出错误的答案(将密钥视为紧凑的连续区域)。
我理解提供可迭代的重点,但它迫使我每次都明确地构建一个列表。
我知道我可以简单地将其插入一个方法中,但是有更紧凑和有效的方法来实现这个目标吗?
答案 0 :(得分:1)
要求对itertools.groupby
的输入进行排序的要求并不让我感到惊讶,因为这是对groupby问题进行基于迭代器的解决方案的唯一方法(即你按照自己的方式进行分组而不是在返回之前访问所有元素。)
如果这对你来说很难/不方便,为什么不自己包装这个功能?:
def mygroupby(iterable, key):
return itertools.groupby(sorted(iterable, key=key), key=key)