2012-10-31 16 views
6

同一のキー付き辞書のリスト内の各辞書キーを異なるキー名に再マッピングする方法はありますか?例えば、辞書リストのキー名の再マッピング

[{'type_id': 6, 'type_name': 'Type 1'}, {'type_id': 12, 'type_name': 'Type 2'}] 

[{'type': 6, 'name': 'Type 1'}, {'type': 12, 'name': 'Type 2'}] 

に変換する必要があります(私は私が働いているAPIのための出力仕様に合わせるために変換を行う必要があります。)

+0

"最良の" 何を測定することにより?これを行う方法はたくさんあります。読みやすい?低メモリ?速い? – Hamish

+0

良い点。どのように "ほとんどのpythonic"について? :)おそらく、コードの最小行で、読みやすい方に傾いています。私はこのタイプのシナリオに直面しているときに、通常はブルートフォースループを作成するのではなく、一般的に、シンプルで面白い組み込みのPythonの機能があります。リストは一般的に20ディクショナリ未満になるので、メモリとスピードは私にとって大きな問題ではありません。 –

+0

http://stackoverflow.com/questions/644178/how-do-i-re-map-python-dict-keys – Pramod

答えて

2

だけで使用list comprehension

>>> d = [{'type_id': 6, 'type_name': 'Type 1'}, {'type_id': 12, 'type_name': 'Type 2'}] 
>>> print [{'type':x['type_id'],'name':x['type_name']} for x in d] 
[{'type': 6, 'name': 'Type 1'}, {'type': 12, 'name': 'Type 2'}] 
>>> 
+0

私はいつもあなたがリスト内包表記でどれくらいできるかに驚いています。 –

8

dict comprehensionを使用して)のPython> = 2.7:

transform = {"type_id": "type", "type_name": "name"} 
new_list = [{transform[k]: v for k, v in d.items()} for d in old_list] 

dictコンストラクタを使用して)のPython> = 2.4:

transform = {"type_id": "type", "type_name": "name"} 
new_list = [dict((transform[k], v) for k, v in d.items()) for d in old_list] 
+0

リストの理解の中のネストされた辞書の理解は、変換を行うための非常に強力で柔軟な構文です。私はもっ​​と複雑なケースのためにそれを考えていますが、私のニーズの単純さを考えると、Joranはもっと簡単ですよ。 –

1

新規ユーザーフレンドリーな、読みやすい方法:インプレース変更について

>>> list2 = [] 
>>> for d in list1: 
...  x = dict() 
...  for k,v in d.iteritems(): 
...  x[k.split('_')[1]] = v 
...  list2.append(x) 
... 
>>> list2 
[{'name': 'Type 1', 'id': 6}, {'name': 'Type 2', 'id': 12}] 
+0

これは 'k.split( '_')[0]'になります。 –

3

方法?

>>> transform = {"type_id": "type", "type_name": "name"}  
>>> for D in L: 
    for k,k_new in transform.items(): 
     D[k_new] = D.pop(k)    
>>> L 
[{'type': 6, 'name': 'Type 1'}, {'type': 12, 'name': 'Type 2'}] 

あるいはさらに良い:

>>> for D in L: 
    for k,k_new in transform.items(): 
     value = D.pop(k,None) 
     if value is not None: 
      D[k_new] = value 
関連する問題