根据多个键或多个键合并或合并字典

发布于 2021-01-29 14:10:08

我整个上午都在搜索,但是大多数合并示例仅基于一个键,而在多个键上却找不到任何东西。

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}
    ]
关注者
0
被浏览
189
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这是从元组中重新锁定:

    >>> 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}]
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看