除了一个字典之外,从列表中删除重复字典可以使用python重复

时间:2016-06-15 08:18:11

标签: python duplicates

我有一个像

这样的清单
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做到这一点?

2 个答案:

答案 0 :(得分:0)

如果你对非列表理解解决方案没问题,那么试试这个:

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

答案 1 :(得分:0)

您只需添加or

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