我想根据重复的元素合并、汇总以下词典列表,并包含一个新的键,指示该特定词典的重复次数.

初始词典:

list_ = [
    {'id': 2, 'prodDescription': 'Hofbräu Kellerbier 500 ml', 'prodPrice': Decimal('6.50')}, 
    {'id': 1, 'prodDescription': 'Tonic Water 300 ml', 'prodPrice': Decimal('4.50')}, 
    {'id': 1, 'prodDescription': 'Tonic Water 300 ml', 'prodPrice': Decimal('4.50')}, 
    {'id': 3, 'prodDescription': 'Coxinha 6 unidades', 'prodPrice': Decimal('8.00')}]

正如您所看到的,有2个条目包含'id': 1,所以我希望得到的结果是:

list_ = [
    {'id': 2, 'prodDescription': 'Hofbräu Kellerbier 500 ml', 'prodPrice': Decimal('6.50'), 'QUANTITY': 1}, 
    {'id': 1, 'prodDescription': 'Tonic Water 300 ml', 'prodPrice': Decimal('4.50'), 'QUANTITY': 2}, 
    {'id': 3, 'prodDescription': 'Coxinha 6 unidades', 'prodPrice': Decimal('8.00'), 'QUANTITY': 1}]

我已经try 了collections个,但这聚合了所有元素:

result = Counter()
for prod in list_:
    result.update(prod)
    print(result)
Counter({'id': 7, 'prodDescription': 'Coxinha 6 unidadesTonic Water 300 mlTonic Water 300 mlHofbräu Kellerbier 500 ml', 'prodPrice': '8.004.504.506.50'})

有人能给我一些提示吗?

推荐答案

您已经接近Counter名了,只需按ID计数即可.

from collections import Counter

counts = Counter(d['id'] for d in list_)

然后,要将其转换为您想要的输出,请按ID对dicts进行重复数据删除并添加数量关键字.

by_id = {d['id']: d for d in list_}  # Saves last occurrence
result = [{**by_id[k], 'QUANTITY': v} for k, v in counts.items()]

结果:

[{'id': 2, 'prodDescription': 'Hofbräu Kellerbier 500 ml', 'prodPrice': Decimal('6.50'), 'QUANTITY': 1},
 {'id': 1, 'prodDescription': 'Tonic Water 300 ml', 'prodPrice': Decimal('4.50'), 'QUANTITY': 2},
 {'id': 3, 'prodDescription': 'Coxinha 6 unidades', 'prodPrice': Decimal('8.00'), 'QUANTITY': 1}]

Python相关问答推荐

在函数内部使用eval(),将函数的输入作为字符串的一部分

如何让 turtle 通过点击和拖动来绘制?

如何从具有多个嵌入选项卡的网页中Web抓取td类元素

连接两个具有不同标题的收件箱

重新匹配{ }中包含的文本,其中文本可能包含{{var}

rame中不兼容的d类型

按顺序合并2个词典列表

如何从在虚拟Python环境中运行的脚本中运行需要宿主Python环境的Shell脚本?

Polars:用氨纶的其他部分替换氨纶的部分

如何设置视频语言时上传到YouTube与Python API客户端

如何在UserSerializer中添加显式字段?

当递归函数的返回值未绑定到变量时,非局部变量不更新:

如何在Python中获取`Genericums`超级类型?

如何从比较函数生成ngroup?

数据框,如果值在范围内,则获取范围和

简单 torch 模型测试:ModuleNotFoundError:没有名为';Ultralytics.yolo';

裁剪数字.nd数组引发-ValueError:无法将空图像写入JPEG

如何在Django模板中显示串行化器错误

在任何要保留的字段中添加引号的文件,就像在Pandas 中一样

根据过滤后的牛郎星图表中的数据计算新系列