Вы можете использовать словарь, чтобы делать то, что вы хотите. Ваш текущий код примерно в 90% случаев:
threshold = time.time()-15 # helps performance to compute this only once
dict1 = {k: v for k, v in dict1.items() if v <= threshold}
dict2 = {k: v for k, v in dict2.items() if v <= threshold}
dict3 = {k: v for k, v in dict3.items() if v <= threshold}
Хотя это работает, это не особенно эффективно, так как нужно перебирать все значения во всех словарях. Если срок действия многих значений не истечет, возможно, вы захотите найти лучший способ. Одна идея состоит в том, чтобы поместить value, key, dictionary
кортежей в кучу и удалять их до тех пор, пока наименьшее значение не превысит пороговое значение. Модуль heapq
позволяет легко создавать кучи:
import heapq
from collections import counter
dict1 = {1111: 915824792, 2222:1053632792, 1234:2211219992}
dict2 = {1114: 1291837592, 9999:1580067992, 2317:2242496792}
dict3 = {1777: 1229543192, 8888:1895687192, 2319:3725639192}
heap = []
tie_breaker = counter()
for k, v in dict1.items():
heapq.heappush(heap, (v, k, tie_breaker(), dict1))
for k, v in dict2.items():
heapq.heappush(heap, (v, k, tie_breaker(), dict2))
for k, v in dict3.items():
heapq.heappush(heap, (v, k, tie_breaker(), dict3))
threshold = time.time()-15
while heap[0][0] <= threshold:
v, k, tb, dct = heapq.heappop(heap)
del dct[k]
Обратите внимание, что если вы неоднократно выполняете этот срок действия, вам не нужно повторять циклы for
, помещая все элементы в кучу, просто добавьте каждый новый элемент в кучу одновременно с тем, который вы добавляете в одну из них. словарей.