python dict 合并
問題描述
現有 a , b 兩個字典,他們都有一個共同的id 1 , 實現dict的合并和mysql中 select a.id,a.MUT,b.neighbor from a full join b on a.id = b.id執行結果很類似
a = {'id': '1','MUT': '1500', } b = {'id': '1','neighbor': [2] } # result = addfunction(a,b) result = {'id': '1','MUT': '1500','neighbor': [2] }
如何實現?
考慮復雜情況:
a = [ {'id': '1','MUT': '1500', }, {'id': '2','MUT': '1500', }]b = [ {'id': '1','neighbor': [2] }, {'id': '3','neighbor': [2] }]# result = addfunction(a,b)result = [ {'id': '1','MUT': '1500','neighbor': [2] }, {'id': '2','MUT': '1500', }, {'id': '3','neighbor': [2] }]
問題解答
回答1:l_a = len(a)l_b = len(b)b_map = {}result = []for _ in range(l_b): i = b.pop() b_map[i[’id’]] = ifor _ in range(l_a): i = a.pop() if i[’id’] in b_map:i.update(b_map.pop(i[’id’])) result.append(i)result.extend(b_map.values())print(result)[{’MUT’: ’1500’, ’id’: ’2’}, {’MUT’: ’1500’, ’id’: ’1’, ’neighbor’: [2]}, {’id’: ’3’, ’neighbor’: [2]}]回答2:
from collections import defaultdictdef combineListDict(l1,l2,joinKeys = ['id']): d = defaultdict(dict) for l in (l1, l2):for elem in l: if len(joinKeys) == 1:joinKeysStr = elem[joinKeys[0]] else:joinKeysStr = reduce((lambda x, y: str(elem[x]) + str(elem[y])),joinKeys) d[joinKeysStr].update(elem) return d.values()
因為join on 條件可能時多個值,我在stack上找了個代碼改了一下。
相關文章:
1. java servlet后臺導出上萬條數據到excel,太慢!求解2. javascript - 一排三個框,各個框的間距是15px,距離外面的白框間距也是15px,這個css怎么寫?3. mysql函數unix_timestamp如何處理1970.1.1以前的數據?4. 怎樣使留言的數據與登錄的用戶名,密碼保持一致(在數據庫上是一行的)。5. mysql money 插入數據為什么報錯?6. java - 關于使用POI解析excel中的時間格的值7. html - 急求,能否用flex或者高端點的CSS來布局這個圖呢?不想用浮動或定位了8. css如何實現兩欄布局,左邊固定寬度,右邊寬度自適應,且高度和瀏覽器當前高度一致?9. javascript - vue-cli 發布之后,如何在接口地址中去掉在開發環境中設置的跨域proxyTable配置10. 請問永久和臨時重定向有什么區別
