Python編程根據(jù)字典列表相同鍵的值進(jìn)行合并
一、前言
今天有粉絲咨詢了一個(gè)問題,他現(xiàn)在有兩個(gè)列表,它們的元素都為字典,且字典都有一個(gè)key為id,現(xiàn)在想把這兩個(gè)字典根據(jù)id合并為一個(gè)字典,類型下面的效果:
兩個(gè)列表的數(shù)據(jù)為:
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'}]
期望合并的結(jié)果
[{'id': 1, 'name': 'a', 'value': 11},
{'id': 2, 'name': 'b', 'value': 22},
{'id': 3, 'name': 'c', 'value': 33}]
二、實(shí)現(xiàn)分析
這是粉絲寫的實(shí)現(xiàn)代碼:
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)
通過兩個(gè)for循環(huán)來將a_list中元素字典id值等于b_list元素字段id值的值加入到對(duì)應(yīng)的b_list元素字典中。
實(shí)際上兩行代碼就可以解決這個(gè)問題:
1.我們可以先通過推導(dǎo)式將a_list重新組裝為{id:value}的形式
a_values = {a['id']: a['value'] for a in a_list}
a_values的值為:
{1: 11, 2: 22, 3: 33}
2.然后再通過推導(dǎo)式和字典解構(gòu)再合并的方式將值與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)
當(dāng)然一行代碼也可以搞定,直接把兩個(gè)推導(dǎo)式合并
res_list = [{**b, **{'value': {a['id']: a['value'] for a in a_list}[b['id']]}} for b in b_list]
但這就是為了裝X而寫代碼了,毫無必要!
三、總結(jié)
就是推導(dǎo)式和字典通過**解構(gòu)來合并這兩個(gè)知識(shí)點(diǎn)。
以上就是Python學(xué)習(xí)字典列表根據(jù)相同鍵的值進(jìn)行合并的詳細(xì)內(nèi)容,更多關(guān)于Python字典列表鍵值合并的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python循環(huán)緩沖區(qū)的應(yīng)用詳解
循環(huán)緩沖區(qū)是一個(gè)線性緩沖區(qū),邏輯上被視為一個(gè)循環(huán)的結(jié)構(gòu),本文主要為大家介紹了Python中循環(huán)緩沖區(qū)的相關(guān)應(yīng)用,有興趣的小伙伴可以了解一下2025-03-03
python神經(jīng)網(wǎng)絡(luò)pytorch中BN運(yùn)算操作自實(shí)現(xiàn)
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)pytorch中BN運(yùn)算操作自實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Python實(shí)現(xiàn)扣除個(gè)人稅后的工資計(jì)算器示例
這篇文章主要介紹了Python實(shí)現(xiàn)扣除個(gè)人稅后的工資計(jì)算器,涉及Python流程控制與數(shù)學(xué)運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
python 實(shí)現(xiàn)docx與doc文件的互相轉(zhuǎn)換
這篇文章主要介紹了python 實(shí)現(xiàn)docx與doc文件的互相轉(zhuǎn)換操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03
Python的for和break循環(huán)結(jié)構(gòu)中使用else語句的技巧
平時(shí)我們把在if結(jié)構(gòu)中使用else語句當(dāng)作理所當(dāng)然,然而,Python強(qiáng)大的語法糖可以讓else語句在for和while循環(huán)中使用!下面我們就通過例子來看一下Python的for和break循環(huán)結(jié)構(gòu)中使用else語句的技巧2016-05-05
Python機(jī)器學(xué)習(xí)之預(yù)測黃金價(jià)格
這篇文章主要介紹了如何使用機(jī)器學(xué)習(xí)方法來預(yù)測最重要的貴金屬之一黃金的價(jià)格,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以試一試2022-01-01
python基于event實(shí)現(xiàn)線程間通信控制
這篇文章主要介紹了python基于event實(shí)現(xiàn)線程間通信控制,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
python實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)源碼
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)源碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-02-02

