根据条件删除字典列表中的重复项
Delete duplicates in list of dictionary depending on criteria
我只发现人们想要删除重复项但不依赖于包含键值的标准的问题。
假设我有一个包含字典的列表
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'}
]
尝试:
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'}]
始终按任何输入顺序 'version' 排序的代码:
(输入顺序改为 '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'}
我只发现人们想要删除重复项但不依赖于包含键值的标准的问题。
假设我有一个包含字典的列表
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'}
]
尝试:
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'}]
始终按任何输入顺序 'version' 排序的代码:
(输入顺序改为 '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'}