2016-08-24 7 views
1

でタプルを結合:ソートと私は、このいずれかのようなリスト持って繰り返し要素

a = [(2, 'T'), (0, 'W'), (1, 'J'), (0, 'V'), (2, 'C')] 

を、私はこれに変換する必要があります。

b = [(0, 'W', 'V'), (1, 'J'), (2, 'T', 'C')] 

これは、次のとおりです。最初で、それを並べ替えます各タプル内の要素を繰り返し、最初の要素が繰り返されるすべてのタプルを1つのタプルに結合します。

私はforのいくつかの複雑な使用でこれを行うことができますが、より簡単/簡単な方法があるかもしれない場合、私は思ったんだけど

+1

http://stackoverflow.com/questions/18909280/python-list-of-tuples-merge-2nd-element-with-unique-first-elementこれはグループバイの理想的なケースです –

+1

これは非常に明確ですその質問の複製@パドレイクカニンガム、それを指摘していただきありがとうございます。重複として閉じる投票。 – Gabriel

+1

最後に結果を並べ替える必要があるので、groupbyの_、g(sorted(a、g))に対して 'groupby()' '>>> [tuple(OrderedDict.fromkeys(chain.from_iterable(g) [(0、 'W'、 'V')、(1、 'J')、(2、 'T'、 'C​​')] ' – Kasramvd

答えて

1

ここでの可能なソリューションです(おそらくzip()sorted()を使用して?):

from collections import defaultdict 

a = [(2, 'T'), (0, 'W'), (1, 'J'), (0, 'V'), (2, 'C')] 

b = defaultdict(list) 

for v in a: 
    b[v[0]].append(v[1]) 

b = [tuple([k] + [b[k]]) for k in sorted(b.keys())] 
print b 
関連する問題