我有一个字典列表,其中有时有重复的字典。例:
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']
。这样我们就知道哪个字典是重复的。我们现在必须删除它出现的任何一个。我们如何从列表中删除该事件?
正如@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'}]
可以使用字典的字典,使用name作为键。这样,如果你插入一个同名的新对象,它将替换之前的对象。
如果你需要保持顺序,你可以使用OrderedDict。