如果你的類型的字典在排序順序基礎上,'remote'
鍵,你可以通過'remote'
鍵組他們,並得到最後一個條目,這將是最新的時間戳。
l = [{'remote': '1', 'quantity': 1.0, 'timestamp': 1},
{'remote': '2', 'quantity': 1.0, 'timestamp': 2},
{'remote': '2', 'quantity': 1.0, 'timestamp': 3}]
from itertools import groupby
from operator import itemgetter
l[:] = (list(v)[-1] for _, v in groupby(l,key=(itemgetter("remote"))))
print(l)
[{'timestamp': 1, 'remote': '1', 'quantity': 1.0},
{'timestamp': 3, 'remote': '2', 'quantity': 1.0}]
l[:]
改變了最初的名單,(list(v)[-1] for k,v in groupby(l,key=(itemgetter("remote"))))
是發電機的表達,這意味着我們並不需要在內存中的所有內容存儲在這一次如果內存也是一個問題將有所幫助。
這也將用於未排序的數據工作,一旦受騙者總是在一起,最新的重複數據刪除是最後:
l = [{'remote': '1', 'quantity': 1.0, 'timestamp': 1},
{'remote': '4', 'quantity': 1.0, 'timestamp': 1},
{'remote': '2', 'quantity': 1.0, 'timestamp': 2},
{'remote': '2', 'quantity': 1.0, 'timestamp': 3}]
l[:] = (list(v)[-1] for k,v in groupby(l, key=(itemgetter("remote"))))
print(l)
[{'timestamp': 1, 'remote': '1', 'quantity': 1.0}, {'timestamp': 1, 'remote': '4', 'quantity': 1.0}, {'timestamp': 3, 'remote': '2', 'quantity': 1.0}]
或者如果受騙者不排序得到基於時間戳最大:
l = [{'remote': '1', 'quantity': 1.0, 'timestamp': 1},
{'remote': '4', 'quantity': 1.0, 'timestamp': 1},
{'remote': '2', 'quantity': 1.0, 'timestamp': 3},
{'remote': '2', 'quantity': 1.0, 'timestamp': 2}]
l[:] = (max(v,key=itemgetter("timestamp")) for _, v in groupby(l, key=(itemgetter("remote")))
[{'timestamp': 1, 'remote': '1', 'quantity': 1.0}, {'timestamp': 1, 'remote': '4', 'quantity': 1.0}, {'timestamp': 3, 'remote': '2', 'quantity': 1.0}]
如果您打算分類,您應該使用遙控鑰匙進行反向排序,接下來請撥打v
以獲得最新的:
l = [{'remote': '1', 'quantity': 1.0, 'timestamp': 1},
{'remote': '4', 'quantity': 1.0, 'timestamp': 1},
{'remote': '2', 'quantity': 1.0, 'timestamp': 3},
{'remote': '2', 'quantity': 1.0, 'timestamp': 2}]
l.sort(key=itemgetter("remote"),reverse=True)
l[:] = (next(v) for _, v in groupby(l, key=(itemgetter("remote"))))
print(l)
排序將改變字典的順序,所以可能不適合你的問題,如果你的dicts
是像你的輸入那樣,那麼你不必擔心排序問題。
才能添加您的預期了把你的代碼,您到目前爲止試過嗎? – Kasramvd
是每個字典中的關鍵字,並且是排序順序的字典嗎? –