python中groupby的类似Spark的方法

时间:2016-03-11 08:49:47

标签: python

使用Spark一段时间后,尝试在普通Python中使用groupby()似乎不必要复杂

我使用此代码

([ (k,list(v)) 
   for k,v in itertools.groupby(
                                sorted(
                                       data
                                       ,key=itemgetter(0))
                                ,key=itemgetter(0))]
)

如果不首先对数据进行排序,则会给出错误的答案(将密钥视为紧凑的连续区域)。

我理解提供可迭代的重点,但它迫使我每次都明确地构建一个列表。

我知道我可以简单地将其插入一个方法中,但是有更紧凑和有效的方法来实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

要求对itertools.groupby的输入进行排序的要求并不让我感到惊讶,因为这是对groupby问题进行基于迭代器的解决方案的唯一方法(即你按照自己的方式进行分组而不是在返回之前访问所有元素。)

如果这对你来说很难/不方便,为什么不自己包装这个功能?:

def mygroupby(iterable, key):
    return itertools.groupby(sorted(iterable, key=key), key=key)