-4

マージする必要がある次のデータがあります。

tuples = ('ziyao','sa'),('guilog','sa'),('yiping','pe'),('tom','pesa'),('haha','pesa'),('hehe','pesa')

私が望む出力は次のとおりです。

tuples = [('ziyao','guilog','sa'),('yiping','pe'),('tom','haha','hehe','pesa')] # or 'ziyao','guilog','sa'\n'yiping','pe'\n...
4

2 に答える 2

4

彼の言いたいことは分かると思います...

>>> from itertools import groupby
>>> tuples = ('ziyao','sa'),('guilog','sa'),('yiping','pe'),('tom','pesa'),('haha','pesa'),('hehe','pesa')
>>> [list(zip(*v)[0]) + [k] for k,v in groupby(tuples,lambda x: x[1])]
[['ziyao', 'guilog', 'sa'], ['yiping', 'pe'], ['tom', 'haha', 'hehe', 'pesa']]
于 2012-04-06T05:33:02.853 に答える
1
from collections import defaultdict
by_second = defaultdict(list)
for first, second in input_tuples:
    by_second[second].append(first)
output_tuples = [tuple(v) + (k,) for k,v in by_second.iteritems()]
于 2012-04-06T04:59:10.070 に答える