2

我有以下长 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'))

但是,这不会正确分组第三项“名称”...

4

2 回答 2

2

您在粘贴的代码的第 8 行有错字,您正在索引things而不是thing. 代替

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

你要

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

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

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

于 2013-10-07T19:42:11.147 回答
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')
于 2013-10-07T19:42:41.757 回答