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. android - 优酷的安卓及苹果app还在使用flash技术吗?2. javascript - 图片上传的时候怎样把图片和字符串一起post提交到服务器?3. require后不用使用echo返回到微信服务器 吗4. javascript - 使用vue做个抽奖问题5. mysql - 仅仅只是把单引号与反斜杠转义不用prepare statement能否避免sql注入?6. css3 - 做响应式布局,媒体查询最普遍设的宽度都有哪几个?7. css3 - css 选择器如何同时使用属性选择和顺序选择?8. python - Win7调用flup报错’module’ object has no attribute ’fromfd’9. angular.js使用$resource服务把数据存入mongodb的问题。10. 超链接里的target问题

网公网安备