2013-10-07 96 views
1

我有以下長的巨蟒truple集團蟒蛇元組

('user1', 'data1', 'name1'), ('user2', 'data1', 'name1'), ('user1', 'data2', 'name2'), ('user2', 'data2', 'name2') etc.. 

我想組truple如下

('user1', 'data1', 'name1', name2), ('user2', 'data1', 'name1', name2) etc.. 

有沒有人知道該怎麼做..迄今我有

things = [('user1', 'data1', 'name1'), ('user2', 'data1', 'name1'), ('user1', 'data2', 'name2'), ('user2', 'data2', 'name2')] 

things = sorted(things, key=lambda tup: tup[0]) 

for key, group in groupby(things, lambda x: x[0]): 
    print key 
    for thing in group: 
     print (key, thing[1], things[2]) 
    print " " 

,輸出

user1 
('user1', 'data1', ('user2', 'data1', 'name1')) 
('user1', 'data2', ('user2', 'data1', 'name1')) 

user2 
('user2', 'data1', ('user2', 'data1', 'name1')) 
('user2', 'data2', ('user2', 'data1', 'name1')) 

儘管如此,這並不組第三項「姓名」正確...

+3

語法錯誤?也許你想'print(key,thing [1],thing [2])''。另外,爲了明確,你可以在代碼的頂部插入'from itertools import groupby'。 – wildwilhelm

+1

如果要按元組的第一個元素進行分組,爲什麼'data2'不出現在以user1開頭的結果元組中?這是否滿足? – Hyperboreus

+0

'print(key,thing [1],things [2])'不能被'print thing'替換? – WolframH

回答

2

你必須在你粘貼代碼,你在哪裏索引things而不是thing的8號線一錯字。取而代之的

print (key, thing[1], things[2]) 

你想

print (key, thing[1], thing[2]) 

然後你會得到你期待的輸出。

注意:@wildwilhelm在評論中首先指出了這一點。

2

這可能是使用defaultdict的好地方:

from collections import defaultdict 

things = [('user1', 'data1', 'name1'), 
      ('user2', 'data1', 'name1'), 
      ('user1', 'data2', 'name2'), 
      ('user2', 'data2', 'name2')] 

grouped_things = defaultdict(list) 
for thing in things: 
    grouped_things[thing[0]].append(thing) 
for key in grouped_things: 
    print key 
    for thing in grouped_things[key]: 
     print thing 
    print 

結果:

user2 
('user2', 'data1', 'name1') 
('user2', 'data2', 'name2') 

user1 
('user1', 'data1', 'name1') 
('user1', 'data2', 'name2')