2016-05-10 17 views

答えて

4

あなたが値を収集するために、値型としてlistdefaultdictを使用することができます。

In [5]: from collections import defaultdict 

In [6]: data = [{u'value': u'firstname', u'key': u'Coach'}, 
{u'value': u'lastname', u'key': u'Coach'}, 
{u'value': u'age', u'key': u'Coach'}, 
{u'value': u'firstname', u'key': u'Player'}, 
{u'value': u'league', u'key': u'Player'}] 

In [7]: l = defaultdict(list) 

In [8]: for row in data: 
    ...:  l[row['key']].append(row['value']) 
    ...:  

In [9]: l 
Out[9]: 
defaultdict(list, 
      {'Coach': ['firstname', 'lastname', 'age'], 
      'Player': ['firstname', 'league']}) 

をそして、あなたは簡単にitems方法使用してタプルのリストに辞書を変換することができます:

In [10]: list(l.items()) 
Out[10]: 
[('Coach', ['firstname', 'lastname', 'age']), 
('Player', ['firstname', 'league'])] 
3
[(k, [x['value'] for x in v]) for k, v in itertools.groupby(sorted(data, key=lambda x: x['key']), lambda d: d['key'])] 

groupbyは標準モジュールitertoolsにあります。

EDIT:itertools.groupbyが連続している入力シーケンスが必要であることを指摘し 感謝@soon、これ事前にソートする必要があります。

+1

'groupby'グループの連続する要素のみ – soon

+0

@soon、大きなバグ、ちょうど固定、ありがとう。 –

+2

[operator.itemgetter](https://docs.python.org/3/library/operator.html#operator.itemgetter)も便利です。 – soon

関連する問題