我整个上午都在搜索,但是大多数合并示例仅基于一个键,而在多个键上却找不到任何东西。
x = [ {'pid':111, 'sid':6, 'eid':123, 'x_qty':30}, {'pid':222, 'sid':56, 'eid':6212, 'x_qty':2} ] y = [ {'pid':111, 'sid':6, 'eid':123, 'y_qty':123}, {'pid':333, 'sid':56, 'eid':6212, 'y_qty':112} ]
pid = 111,sid = 6,eid = 123的值在x和y中都匹配,然后合并为一条记录。如果它们不匹配,只需将其原样带过来。
我想要的最终结果:
z = [ {'pid': 111, 'sid': 6, 'eid': 123, 'x_qty': 30, 'y_qty': 123}, {'pid': 222, 'sid': 56, 'eid': 6212, 'x_qty': 2}, {'pid': 333, 'sid': 56, 'eid': 6212, 'y_qty': 112} ]
这是从元组中重新锁定:
>>> from operator import itemgetter >>> from collections import defaultdict >>> data = defaultdict(dict) >>> f = itemgetter('pid', 'sid', 'eid') >>> for d in [*x, *y]: ... data[f(d)].update(d) ... >>> list(data.values()) [{'eid': 123, 'pid': 111, 'sid': 6, 'x_qty': 30, 'y_qty': 123}, {'eid': 6212, 'pid': 222, 'sid': 56, 'x_qty': 2}, {'eid': 6212, 'pid': 333, 'sid': 56, 'y_qty': 112}]