Объединение/Объединение/Объединение словарей с одним и тем же ключом внутри списка

#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},....]
 

попытался объединить их по артикулу, но другой магазин не показывает, пожалуйста, помогите

 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:

Попробуй:

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