我有以下长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'))
然而,这并没有正确地将第三项“名称”分组......
答案 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')