首页 > 解决方案 > 从字典列表中删除重复项

问题描述

我有一个这样的字典列表:

[{'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}]

标签: python

解决方案


最有效的解决方案是使用一个临时查找字典,其中键为IDs ,值作为当前字典,其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}]

一条建议:鉴于您的最终数据结构,我想知道您现在是否最好将这个最终数据表示为字典 - 使用IDs 作为键,因为它们现在是唯一的。这将允许更方便的数据访问。


推荐阅读