Python編程根據字典列表相同鍵的值進行合並
一、前言
今天有粉絲咨詢瞭一個問題,他現在有兩個列表,它們的元素都為字典,且字典都有一個key
為id,現在想把這兩個字典根據id合並為一個字典,類型下面的效果:
兩個列表的數據為:
a_list = [{'id': 1, 'value': 11}, {'id': 2, 'value': 22}, {'id': 3, 'value': 33}] b_list = [{'id': 1, 'name': 'a'}, {'id': 2, 'name': 'b'}, {'id': 3, 'name': 'c'}]
期望合並的結果
[{'id': 1, 'name': 'a', 'value': 11}, {'id': 2, 'name': 'b', 'value': 22}, {'id': 3, 'name': 'c', 'value': 33}]
二、實現分析
這是粉絲寫的實現代碼:
for i in range(len(b_list)): for a in a_list: if b_list[i]['id'] == a['id']: b_list[i]['value'] = a['value'] print(b_list)
通過兩個for循環來將a_list
中元素字典id
值等於b_list
元素字段id
值的值加入到對應的b_list
元素字典中。
實際上兩行代碼就可以解決這個問題:
1.我們可以先通過推導式將a_list
重新組裝為{id:value}
的形式
a_values = {a['id']: a['value'] for a in a_list}
a_values的值為:
{1: 11, 2: 22, 3: 33}
2.然後再通過推導式和字典解構再合並的方式將值與b_list
重新組裝:
res_list = [{**b, **{'value': a_values[b['id']]}} for b in b_list]
組裝後的列表值為
res_list的值為: [{'id': 1, 'name': 'a', 'value': 11}, {'id': 2, 'name': 'b', 'value': 22}, {'id': 3, 'name': 'c', 'value': 33}]
完整示例代碼
a_list = [{'id': 1, 'value': 11}, {'id': 2, 'value': 22}, {'id': 3, 'value': 33}] b_list = [{'id': 1, 'name': 'a'}, {'id': 2, 'name': 'b'}, {'id': 3, 'name': 'c'}] a_values = {a['id']: a['value'] for a in a_list} res_list = [{**b, **{'value': a_values[b['id']]}} for b in b_list] print('res_list的值為:', res_list)
當然一行代碼也可以搞定,直接把兩個推導式合並
res_list = [{**b, **{'value': {a['id']: a['value'] for a in a_list}[b['id']]}} for b in b_list]
但這就是為瞭裝X而寫代碼瞭,毫無必要!
三、總結
就是推導式和字典通過**
解構來合並這兩個知識點。
以上就是Python學習字典列表根據相同鍵的值進行合並的詳細內容,更多關於Python字典列表鍵值合並的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- Python中的for循環詳情
- Python序列的推導式實現代碼
- python基礎入門之列表(一)
- 淺談Python xlwings 讀取Excel文件的正確姿勢
- python進階從青銅到王者一定會用上的Python技巧