6

同じキーを持つ辞書のリスト内の各辞書キーを別のキー名に再マップするPythonicの方法は何ですか? 例えば、

[{'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 の出力仕様に一致させるために、変換を行う必要があります。)

4

4 に答える 4

8

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]

Python >= 2.4 ( dictコンストラクターを使用):

transform = {"type_id": "type", "type_name": "name"}
new_list = [dict((transform[k], v) for k, v in d.items()) for d in old_list]
于 2012-10-31T05:42:39.253 に答える
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
于 2012-10-31T06:08:03.170 に答える
2

リスト内包表記を使用するだけです

>>> 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'}]
>>>
于 2012-10-31T05:40:20.270 に答える
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}]
于 2012-10-31T05:42:54.763 に答える