python - 从字典列表中删除重复项
问题描述
我有一个这样的字典列表:
[{'ID': 'a', 'Number': 2}, {'ID': 'b', 'Number': 5} , {'ID': 'a', 'Number': 6}, {'ID': 'a', 'Number': 8}, {'ID': 'c', 'Number': 3}]
我想删除具有相同键的字典,只保留具有最小值的字典。预期的结果应该是:
[{'ID': 'a', 'Number': 2}, {'Id': 'b', 'Number': 5}, {'ID': 'c', 'Number': 3}]
解决方案
最有效的解决方案是使用一个临时查找字典,其中键为ID
s ,值作为当前字典,其Number
对应的最小值为ID
。
l = [{'ID': 'a', 'Number': 2},
{'ID': 'b', 'Number': 5}, # note that I corrected a typo Id --> ID
{'ID': 'a', 'Number': 6},
{'ID': 'a', 'Number': 8},
{'ID': 'c', 'Number': 3}]
lookup_dict = {}
for d in l:
if d['ID'] not in lookup_dict or d['Number'] < lookup_dict[d['ID']]['Number']:
lookup_dict[d['ID']] = d
output = list(lookup_dict.values())
这给出output
了:
[{'ID': 'a', 'Number': 2}, {'ID': 'b', 'Number': 5}, {'ID': 'c', 'Number': 3}]
一条建议:鉴于您的最终数据结构,我想知道您现在是否最好将这个最终数据表示为字典 - 使用ID
s 作为键,因为它们现在是唯一的。这将允许更方便的数据访问。
推荐阅读
- grid - UFT 15.01 读取桌面应用程序网格表的时间过长
- angular - 如何修复 Angular 12 中的 Ngx-custom-validator?
- imagemagick - ImageMagick - 将图像的白色转换为另一种,保持透明度并排除黑色
- java - 如何在二维数组上向后添加元素
- r - R ggplot2图例显示顺序
- python - Apache Kafka Kerberos 使用 Python 进行身份验证
- lda - 关于“潜在狄利克雷分配的吉布斯采样器推导”的问题
- linux - Azure Linux WebApp 网络核心日志记录到磁盘工作示例
- python-3.x - 如何在我的自定义 python 包中包含自动下载?
- byte-buddy - bytebuddy - 添加类级别注释