如何从 python 中的列表中删除重复的字典

How to remove duplicate dict from list in python

我有一个字典列表,其中有时会有重复的字典。例如:

objList = 
[{
    'Name': 'plate',
    'StartTime': '2022-05-17T10:26:05.738101',

}, {
    'Name': 'bezel',
    'StartTime': '2022-05-17T10:26:09.922667',

}, {
    'Name': 'chrome',
    'StartTime': '2022-05-17T10:26:23.283304',

}, {
    'Name': 'plate placement',
    'StartTime': '2022-05-17T10:26:25.570845',

}, {
    'Name': 'plate placement',
    'StartTime': '2022-05-17T10:26:39.3390',
}]

在上面的数据中,plate placement是重复的。同样,任何字典都可以复制,但我删除了任何重复数据并只保留一个。为此,首先我想到检查列表中是否有重复的字典:

obj_names = []
for obj in objList:
    obj_names.append(obj['Name'])

现在 obj_names 包含 ['plate', 'bezel', 'chrome', 'plate placement', 'plate placement']。所以这样我们就知道哪个字典是重复的。我们现在必须删除它的任何一个出现。但我不确定我们如何才能从列表中删除该事件。任何人都可以提出建议吗?谢谢

您可以使用名称作为键的字典字典来代替字典列表。这样,如果您插入具有相同名称的新对象,它将替换以前的对象。

如果您需要保留顺序,您可以使用 OrderedDict

正如@mugiseyebrows所说,我们使用每个字典的'Name'(这个说法不是很严谨。)作为键,字典本身作为值来创建一个新的字典,这样你就可以确保具有相同 'Name' 的字典出现一次,然后使用其 values 创建一个新列表:

>>> new_dict = {dct['Name']: dct for dct in objList}
>>> new_list = list(new_dict.values())
>>> print('},\n'.join(str(new_list).split('},')))
[{'Name': 'plate', 'StartTime': '2022-05-17T10:26:05.738101'},
 {'Name': 'bezel', 'StartTime': '2022-05-17T10:26:09.922667'},
 {'Name': 'chrome', 'StartTime': '2022-05-17T10:26:23.283304'},
 {'Name': 'plate placement', 'StartTime': '2022-05-17T10:26:39.3390'}]