2011-11-14 41 views
5

我有這樣的數據:itertools.groupby()

self.data = list: [(1, 1, 5.0), 
        (1, 2, 3.0), 
        (1, 3, 4.0), 
        (2, 1, 4.0), 
        (2, 2, 2.0), 
        (2, 3, 4.0), 
        (2, 5, 3.0), 
        (3, 2, 2.0), 
        (3, 4, 4.0), 
        (3, 5, 3.0)] 

當我運行這段代碼:

for mid, group in itertools.groupby(self.data, key=operator.itemgetter(0)): 

list(group)我得到:

list: [(1, 1, 5.0), 
     (1, 2, 3.0), 
     (1, 3, 4.0)] 

這就是我想要的。

但是,如果使用1而不是0

for mid, group in itertools.groupby(self.data, key=operator.itemgetter(1)): 

到組由元組的第二個數字,我只得到:

list: [(1, 1, 5.0)] 

即使是具有「1等的元組「在那1(2)的位置。

回答

12

itertools.groupby收集在一起連續具有相同鍵的項目。 如果您希望所有項目具有相同的密鑰,則必須先排序self.data

for mid, group in itertools.groupby(
    sorted(self.data,key=operator.itemgetter(1)), key=operator.itemgetter(1)): 
+0

我以前在零位上排序。所以我只是在做groupby之前再次排序並且它工作正常。 self.data.sort(key = operator.itemgetter(1)) – user994165

10

沒有排序的變體(通過字典)。應該更好地表現明智。

def full_group_by(l, key=lambda x: x): 
    d = defaultdict(list) 
    for item in l: 
     d[key(item)].append(item) 
    return d.items() 
+0

回來張貼相同的東西,我沒有看到你的答案!這顯然是走的路:) –

相關問題