將同名鍵詞典列表中的每個詞典鍵重映射到不同鍵名的Python方法是什麼?例如,在詞典列表中重新映射鍵名
[{'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輸出規範。)
將同名鍵詞典列表中的每個詞典鍵重映射到不同鍵名的Python方法是什麼?例如,在詞典列表中重新映射鍵名
[{'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輸出規範。)
只使用一個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'}]
>>>
我總是驚訝於你可以做多少列表解析。 –
的Python> = 2.7(使用dict comprehension):
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]
列表理解中的嵌套字典理解是一種非常強大且靈活的構造,用於執行變換。我肯定會考慮它的更復雜的情況,但考慮到我的需求簡單,我喜歡喬蘭更好一點,因爲它更直接。 –
的新用戶界面友好,易於閱讀方式:
>>> 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}]
這就是'k.split('_')[0]'。 –
如何就地修改?
>>> 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
由什麼措施 「最佳」?有很多方法可以做到這一點。易於閱讀?記憶不足?快速? – Hamish
好點。 「最pythonic」怎麼樣? :)所以可能傾向於易讀,用最少的代碼行。我發現,通常當我遇到這種情況時,通常會有一些很酷或有趣的內置python功能使它發生,而不是寫一個暴力循環,儘管我對此持開放態度。該列表通常少於20個字典,因此記憶和速度對我來說不是什麼大問題。 –
http://stackoverflow.com/questions/644178/how-do-i-re-map-python-dict-keys – Pramod