python - 基于多键或多键组合或合并字典

标签 python python-3.x dictionary

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

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

关于python - 基于多键或多键组合或合并字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50051890/

相关文章:

python - 如何阻止 pyplot 重叠直方图箱?

python - 检查是否有任何字符串列表在另一个字符串中

python - 如何将 wxPython 用于 Python 3?

string - 在 Swift 中从单个字符串创建 [NS] 字典

python - 如何按值列表对字典进行数字排序

python - 按自然顺序使用字母数字键对字典进行排序

python - 如何在 Django 模板中使用原始 Python 代码?

python - 如何使用 **kwargs 更改默认值?

c - 如何使用套接字将数据从 python 发送到 C (unix)

c++ - C++ 中的 4d 映射与元组