在列表中合并/加入/组合具有相同键的字典

时间:2021-06-04 06:27:38

标签: python list dictionary list-comprehension

我有字典列表

rows = [{'sku':123,'barcode':99123,'day_1_qty':9,'store':118},
        {'sku':123,'barcode':99123,'day_1_qty':7,'store':109},
        {'sku':124,'barcode':99124,'day_1_qty':9,'store':118},
        {'sku':123,'barcode':99123,'day_2_qty':10,'store':118}....]

我想合并它们,这是我想要的输出:

rows = [{'sku':123,'barcode':99123,'day_1_qty':9,'store':118,'day_2_qty':10},
        {'sku':123,'barcode':99123,'day_1_qty':7,'store':109},
        {'sku':124,'barcode':99124,'day_1_qty':9,'store':118},....]

尝试通过 sku 合并它们,但其他商店不会显示,请帮忙

def generate_oos(dict_list):
    res = map(lambda dict_tuple: dict(ChainMap(*dict_tuple[1])),
        groupby(sorted(dict_list,key=lambda sub_dict: sub_dict["SKU"]),
                key=lambda sub_dict: sub_dict["SKU"]))

    return list(res)

1 个答案:

答案 0 :(得分:0)

试试:

rows = [
    {"sku": 123, "barcode": 99123, "day_1_qty": 9, "store": 118},
    {"sku": 123, "barcode": 99123, "day_1_qty": 7, "store": 109},
    {"sku": 124, "barcode": 99124, "day_1_qty": 9, "store": 118},
    {"sku": 123, "barcode": 99123, "day_2_qty": 10, "store": 118},
]

tmp = {}
for d in rows:
    tmp.setdefault((d["sku"], d["store"]), []).append(d)

out = []
for k, v in tmp.items():
    out.append({})
    for vv in v:
        out[-1].update(vv)

print(out)

打印:

[
    {
        "sku": 123,
        "barcode": 99123,
        "day_1_qty": 9,
        "store": 118,
        "day_2_qty": 10,
    },
    {"sku": 123, "barcode": 99123, "day_1_qty": 7, "store": 109},
    {"sku": 124, "barcode": 99124, "day_1_qty": 9, "store": 118},
]