一、前言
最近有粉絲咨詢了一個問題,他現在有兩個串列,它們里面的元素都為字典,而且字典都有一個鍵名稱為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}]
點我獲取更多教程、面試經驗、Python分享
(PS:個人在用的人工智能學習網站推薦給大家:captainai,覺得不錯請三連支持一下)
二、具體實作分析
這是粉絲寫的實作代碼:
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而寫代碼了,毫無必要!
三、總結
上述代碼使用了推導式和**解構字典來合并這兩個知識點,他們都是非常常用的技巧,小伙伴們可以花時間去學習一下,能夠讓代碼變得更加簡潔,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/317793.html
標籤:AI
