由第一项组合python元组

时间:2013-10-07 19:30:29

标签: python

我有以下长python元组:

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

我想将元组分组如下

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

有谁知道怎么做...到目前为止我有:

from itertools import groupby

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'))

然而,这并没有正确地将第三项“名称”分组......

2 个答案:

答案 0 :(得分:2)

您粘贴的代码的第8行中有拼写错误,您要将things而不是thing编入索引。而不是

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

你想要

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

然后你会得到你期望的输出。

注意:@wildwilhelm在评论中首先指出了这一点。

答案 1 :(得分: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')