根据条件删除字典列表中的重复项

时间:2021-06-09 10:13:05

标签: python dictionary duplicates

我只发现人们想要删除重复项但不依赖于包含键值的标准的问题。

假设我有一个包含字典的列表

myList = [
  {'version': 'v1', 'updated': '2020-06-17 22:15:00+00:00'},
  {'version': 'v1', 'updated': '2020-08-24 17:37:00+00:00'},
  {'version': 'v5', 'updated': '2019-08-30 11:42:00+00:00'},
  {'version': 'v1', 'updated': '2020-03-11 22:28:00+00:00'},
  {'version': 'v7', 'updated': '2020-06-17 22:15:00+00:00'}
]

现在我想删除键具有相同值的重复字典,例如,version 具有值 v1 并且只保留最新的但我不知道该值是 v1 所以我必须在不知道值的情况下检查 version 中的重复项。找到重复项后,我想比较 update 中的日期并选择最新的日期并根据此条件删除重复项。我不能保证最新的是最后一个条目,就像在 myList 中可以看到的,v1 的第二个条目是最新的,而不是第三个。

结果

myCleanedList= [
  {'version': 'v1', 'updated': '2020-08-24 17:37:00+00:00'},
  {'version': 'v5', 'updated': '2019-08-30 11:42:00+00:00'},
  {'version': 'v7', 'updated': '2020-06-17 22:15:00+00:00'}
]

2 个答案:

答案 0 :(得分:3)

试试:

myList = [
    {"version": "v1", "updated": "2020-06-17 22:15:00+00:00"},
    {"version": "v1", "updated": "2020-08-24 17:37:00+00:00"},
    {"version": "v5", "updated": "2019-08-30 11:42:00+00:00"},
    {"version": "v1", "updated": "2020-03-11 22:28:00+00:00"},
    {"version": "v7", "updated": "2020-06-17 22:15:00+00:00"},
]

out = {}
for d in myList:
    out.setdefault(d["version"], []).append(d)

out = [
    sorted(v, key=lambda k: k["updated"], reverse=True)[0] for v in out.values()
]
print(out)

打印:

[{'version': 'v1', 'updated': '2020-08-24 17:37:00+00:00'}, 
 {'version': 'v5', 'updated': '2019-08-30 11:42:00+00:00'}, 
 {'version': 'v7', 'updated': '2020-06-17 22:15:00+00:00'}]

答案 1 :(得分:0)

始终按任何输入顺序对“版本”进行排序的代码:
(输入顺序改为'version' 1-7-5而不是原来的1-5-7)

myList = [
    {'version': 'v1', 'updated': '2020-06-17 22:15:00+00:00'},
    {'version': 'v7', 'updated': '2020-06-17 22:15:00+00:00'},
    {'version': 'v1', 'updated': '2020-08-24 17:37:00+00:00'},
    {'version': 'v5', 'updated': '2019-08-30 11:42:00+00:00'},
    {'version': 'v1', 'updated': '2020-03-11 22:28:00+00:00'}
]

out = {d["version"]: d for d in sorted(myList, key=lambda k: k["updated"])}
print(*sorted(out.values(), key=lambda k: k["version"]), sep='\n')

输出:

{'version': 'v1', 'updated': '2020-08-24 17:37:00+00:00'}
{'version': 'v5', 'updated': '2019-08-30 11:42:00+00:00'}
{'version': 'v7', 'updated': '2020-06-17 22:15:00+00:00'}