从列表中删除重复的字典(使用python可以复制一个字典除外)

2024-04-19 06:42:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张这样的清单

d=[{'date': datetime.datetime(2016, 6, 3, 8, 32, 35), 'temp': 39.1}, {'date': datetime.datetime(2016, 6, 3, 9, 32, 35), 'temp': 39.1}, {'date': datetime.datetime(2016, 6, 3, 9, 32, 35), 'temp': 39.1}, {'date': None, 'temp': None}, {'date': datetime.datetime(2016, 6, 3, 11, 32, 35), 'temp': 39.1},{'date': None, 'temp': None}]

我的输出应该是

d=[{'date': datetime.datetime(2016, 6, 3, 8, 32, 35), 'temp': 39.1}, {'date': datetime.datetime(2016, 6, 3, 9, 32, 35), 'temp': 39.1},{'date': None, 'temp': None}, {'date': datetime.datetime(2016, 6, 3, 11, 32, 35), 'temp': 39.1},{'date': None, 'temp': None}]

也就是说,它应该从列表中删除所有重复的条目,除非它不应该删除作为重复项的{'date':None,'temp':None}。 我试过了

result = [i for n, i in enumerate(d) if i not in d[n + 1:]]

但如果存在重复项,则它正在删除包括{'date':None,'temp':None}的内容。如何使用python实现这一点


Tags: innone内容列表fordatetimedateif
2条回答

如果您同意非列表理解解决方案,请尝试以下方法:

>>> result = []
>>> for i in d:
...     if (i not in result) or (i == {'date': None, 'temp': None}):
...         result.append(i)

您只需添加一个or

result = [i for n, i in enumerate(d) if i not in d[n + 1:] or i == {'date': None, 'temp': None}]

相关问题 更多 >