从键值创建元组



我有一个列表,里面有字典,有以下键:id,external_id_client,product_id,如下所示:

[{'id': 3, 'external_id_client': '7298', 'product_id': 13}, 
{'id': 3, 'external_id_client': '7298', 'product_id': 8}, 
{'id': 4, 'external_id_client': '3', 'product_id': 12}, 
{'id': 4, 'external_id_client': '3', 'product_id': 9}, 
{'id': 5, 'external_id_client': '4', 'product_id': 12}]

我需要,如果IDexternal_id是重复的,我在product_id键中有信息,它在product_id中创建一个元组。

预期输出:

[{'id': 3, 'external_id_client': '7298', 'product_id': (13, 8)}, 
{'id': 4, 'external_id_client': '3', 'product_id': (12, 9)}, 
{'id': 5, 'external_id_client': '4', 'product_id': (12)}]

我该怎么做?

您可以使用itertools.groupby:

from itertools import groupby
lst = [
{'id': 3, 'external_id_client': '7298', 'product_id': 13}, 
{'id': 3, 'external_id_client': '7298', 'product_id': 8}, 
{'id': 4, 'external_id_client': '3', 'product_id': 12}, 
{'id': 4, 'external_id_client': '3', 'product_id': 9}, 
{'id': 5, 'external_id_client': '4', 'product_id': 12}
]
result = [
{
"id": itemid, 
"external_id_client": client,
"product_id": tuple(item["product_id"] for item in group)
}
for (itemid, client), group 
in groupby(lst, key = lambda item: (item["id"], item["external_id_client"]))
]

最新更新