3

例えば:

l = [('a',1),('b',2),('a',2)]

collapsed_l = dict(a=[1,2],b=[2])

lからに行くのに最適な方法はcollapsed_l

ある意味で、私が崩壊している「フィールド」と、そのフィールドを一般化する方法が必要です。これは、データベースやスプレッドシートでピボットテーブルが行うことと似ていると思いますが、間違っている可能性があります。

4

3 に答える 3

5
>>> from collections import defaultdict
>>> l = [('a',1),('b',2),('a',2)]
>>> collapsed_l = defaultdict(list)     
>>> for letter,num in l:
        collapsed_l[letter].append(num)


>>> collapsed_l
defaultdict(<type 'list'>, {'a': [1, 2], 'b': [2]})
于 2012-04-30T15:56:18.183 に答える
5
>>> from itertools import groupby
>>> from operator import itemgetter
>>> l = [('a',1),('b',2),('a',2)]
>>> dict((k,[n for l,n in v]) for k,v in groupby(sorted(l),itemgetter(0)))
{'a': [1, 2], 'b': [2]}

折りたたまれた値の順序が重要かどうかわからない場合は、編集できsorted(l)ますsorted(l,key=itemgetter(0))

于 2012-04-30T16:06:40.987 に答える
2

最もクリーンなのは、タプルのリストをループして、要素を辞書に追加することです。Setdefault は、キーが存在しない場合に空のリストが追加されることを保証します。キーが存在する場合、要素はリストに追加されます。

>>> d=dict()
>>> for k,e in l:
    d.setdefault(k,[]).append(e)        
>>> d
{'a': [1, 2], 'b': [2]}

collections.defaultdictこの目的で使用することもできます。この場合、setdefaultメソッドは必要ありません。

于 2012-04-30T15:55:19.883 に答える