亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Python中合并兩個沒有id的字典列表

在Python中合并兩個沒有id的字典列表

墨色風雨 2021-04-09 22:21:41
我有兩個這樣的字典列表:list1 =[{doc:1,pos_ini:5,pos_fin:10},{doc:1,pos_ini:7,pos_fin:12},{doc:2,pos_ini:5,pos_fin:10},**{doc:7,pos_ini:5,pos_fin:10}**]list2 =[{doc:1,pos_ini:5,pos_fin:10},**{doc:1,pos_ini:6,pos_fin:7}**,{doc:1,pos_ini:7,pos_fin:12},{doc:2,pos_ini:5,pos_fin:10},**{doc:2,pos_ini:25,pos_fin:30}**]list2有兩個list1沒有的元素,list1有一個list2沒有的元素。我需要list_result合并所有元素:list_result =[{doc:1,pos_ini:5,pos_fin:10},**{doc:1,pos_ini:6,pos_fin:7}**,{doc:1,pos_ini:7,pos_fin:12},{doc:2,pos_ini:5,pos_fin:10},**{doc:2,pos_ini:25,pos_fin:30}**,**{doc:7,pos_ini:5,pos_fin:10}**]用Python做到這一點的最佳方法是什么?謝謝!
查看完整描述

4 回答

?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

您可以使用frozenset()將每個字典散列items()到字典中,然后簡單地獲取分配的值:


list({frozenset(x.items()): x for x in list1 + list2}.values())

或使用map()應用于集合理解:


list(map(dict, {frozenset(x.items()) for x in list1 + list2}))

甚至只使用列表理解:


[dict(d) for d in {frozenset(x.items()) for x in list1 + list2}]

這將產生無序的結果:


[{'doc': 1, 'pos_fin': 10, 'pos_ini': 5},

 {'doc': 1, 'pos_fin': 12, 'pos_ini': 7},

 {'doc': 2, 'pos_fin': 10, 'pos_ini': 5},

 {'doc': 7, 'pos_fin': 10, 'pos_ini': 5},

 {'doc': 1, 'pos_fin': 7, 'pos_ini': 6},

 {'doc': 2, 'pos_fin': 30, 'pos_ini': 25}]

注意:如果需要訂購,則可以collections.OrderedDict()在此處改用:


from collections import OrderedDict


list(OrderedDict((frozenset(x.items()), x) for x in list1 + list2).values())

給出以下有序結果:


[{'doc': 1, 'pos_fin': 10, 'pos_ini': 5},

 {'doc': 1, 'pos_fin': 12, 'pos_ini': 7},

 {'doc': 2, 'pos_fin': 10, 'pos_ini': 5},

 {'doc': 7, 'pos_fin': 10, 'pos_ini': 5},

 {'doc': 1, 'pos_fin': 7, 'pos_ini': 6},

 {'doc': 2, 'pos_fin': 30, 'pos_ini': 25}]


查看完整回答
反對 回復 2021-04-27
?
MM們

TA貢獻1886條經驗 獲得超2個贊

在Python中,有個內置的set集合對此非常適合。問題在于集合需要hashable元素,因此您必須將字典轉換為元組集合:

[dict(items) for items in set(tuple(sorted(d.items())) for d in (list1 + list2))]


查看完整回答
反對 回復 2021-04-27
?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

您可以根據這些值創建一個集合,而不是將其轉換為可哈希對象(如元組)的字典:


unique_list = set(tuple(dictionary.items())) for dictionary in list1 + list2)

然后可以再次轉換回字典和列表格式:


l = []

for item in unique_list:

    l.append(dict(item))

像上面的東西應該工作。


查看完整回答
反對 回復 2021-04-27
  • 4 回答
  • 0 關注
  • 207 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號