2016-03-11 44 views
0

使用火花了一段時間,試圖以純Python中使用GROUPBY()後似乎是不必要複雜火花等的方法在Python

我使用此代碼

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

在不首先對數據進行排序,它給出了錯誤的答案(認爲關鍵在於緊湊的連續區域)。

我明白提供一個迭代的意義,但它迫使我每次都明確地創建一個列表。

我知道我可以簡單地將它插入一個方法中,但有沒有更簡潔有效的方法來實現這一點?

回答

1

需要進行排序的輸入itertools.groupby並不讓我感到吃驚考慮到是有一個基於迭代器的解決GROUPBY問題的唯一途徑(即你組,你去,而不是所有的參觀要求元素返回之前)。

如果這是醜陋/不方便,你爲什麼不自己?:

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

包裹功能我不感興趣,有它的飛行,但元組的簡單列表爲'[(鍵, [(key,value)])]'。我知道我可以定義自己的'groupby',字典會更有效率,'mydict [key] .append(key,value)',然後簡單地將它轉換爲列表。我很好奇,如果有什麼我失蹤 –

+0

@RaduIonescu我相信我的理解與你的理解是一致的,就像你從效率的角度來說,使用itertools方法沒有意義,除非你的數據已經預先分類 –