2013-10-07 72 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')