2

私はそのようなリストを持っています:

[['0', '10'], ['0', '11'], ['0', '12'], ['1', '10'], ['1', '11']]

たとえば上記のように、リスト内の要素をグループ化するにはどうすればよいですか?

['0': ['10','11','12']],['1': ['10','11']]
4

3 に答える 3

6

反復-辞書に入れます。

d = {}
l = [['0', '10'], ['0', '11'], ['0', '12'], ['1', '10'], ['1', '11']]
for p in l:
    if p[0] in d:
        d[p[0]].append(p[1])
    else:
        d[p[0]] = [p[1]]

>>> d
{'1': ['10', '11'], '0': ['10', '11', '12']}

defaultdictを使用する:

from collections import defaultdict

d = defaultdict(list)
l = [['0', '10'], ['0', '11'], ['0', '12'], ['1', '10'], ['1', '11']]
for p in l:
    d[p[0]].append(p[1])

ワンライナー:dictの理解を使用する(少し無駄ですが、インポートはなく、2.7以上が必要です)

>>> dd = {key: [i[1] for i in l if i[0] == key] for (key, value) in l}
>>> dd
{'1': ['10', '11'], '0': ['10', '11', '12']}
于 2012-12-05T09:08:17.457 に答える
5

使用できますcollections.defaultdict

import collections

l = [['0', '10'], ['0', '11'], ['0', '12'], ['1', '10'], ['1', '11']]

d = collections.defaultdict(list)
for k, v in l:
    d[k].append(v)
print(d)
于 2012-12-05T09:09:37.177 に答える
2

あなたが使用することができますdict.setdefault():

In [16]: lis=[['0', '10'], ['0', '11'], ['0', '12'], ['1', '10'], ['1', '11']]

In [17]: dic={}

In [18]: for x,y in lis:
   ....:     dic.setdefault(x,[]).append(y)
   ....:     

In [19]: dic
Out[19]: {'0': ['10', '11', '12'], '1': ['10', '11']}

あなたのリストでitertools.groupbyもうまくいきます:

In [39]: from operator import itemgetter

In [40]: from itertools import groupby

In [34]: lis=[['0', '10'], ['0', '11'], ['0', '12'], ['1', '10'], ['1', '11']]

In [35]: {k:[x[1] for x in g] for k,g in groupby(lis,key=itemgetter(0))}
Out[35]: {'0': ['10', '11', '12'], '1': ['10', '11']}
于 2012-12-05T09:11:43.323 に答える