0

データを含むタプルの大きなリストがあります。

test = [
    ('admin', 1, 2),
    ('admin', 3, 4),
    ('admin', 5, 6),
    ('user', 1, 2),
    ('user', 3, 4),
    ('user', 5, 6),
    ('guest', 1, 2),
    ('guest', 3, 4),
    ('guest', 5, 6)
   ]

タプルの element0 に基づいて、これらを 3 つの個別のイテラブルに分割するにはどうすればよいですか? 例えば;

[('**admin**', 1, 2),('admin', 3, 4),('admin', 5, 6)]

[('**user**', 1, 2),('user', 3, 4),('user', 5, 6),]

[('**guest**', 1, 2),('guest', 3, 4),('guest', 5, 6)]

前もって感謝します!ブレット

4

3 に答える 3

5
from collections import defaultdict

buckets = defaultdict(list)
for tup in test:
    buckets[tup[0]].append(tup)
于 2013-10-23T17:37:00.983 に答える
4

itertools.groupbyリスト内包表記で使用:

>>> test = [('admin', 1, 2), ('admin', 3, 4), ('admin', 5, 6), ('user', 1, 2), ('user', 3, 4), ('user', 5, 6), ('guest', 1, 2), ('guest', 3, 4), ('guest', 5, 6)]
>>>
>>> from operator import itemgetter
>>> from itertools import groupby
>>> 
>>> [list(g) for k, g in groupby(sorted(test, key=itemgetter(0)), itemgetter(0))]
[[('admin', 1, 2), ('admin', 3, 4), ('admin', 5, 6)], [('user', 1, 2), ('user', 3, 4), ('user', 5, 6)], [('guest', 1, 2), ('guest', 3, 4), ('guest', 5, 6)]]
于 2013-10-23T17:39:03.727 に答える
2
iterables = {}
for x in test:
    iterables.setdefault(x[0], []).append(x)

次に、イテラブルはiterables.values().

于 2013-10-23T17:37:46.097 に答える