Было бы неплохо иметь полную поддержку методов набора для словарей (а не того нечестивого беспорядка, который мы получаем с Python 3.9), чтобы вы могли просто «удалить» набор ключей. Однако, если это не так, и у вас есть большой словарь с потенциально большим количеством ключей, которые нужно удалить, вы можете узнать о производительности. Итак, я создал код, который создает что-то достаточно большое для значимых сравнений: матрица 100 000 x 1000, итого 10 000 000 элементов.
from itertools import product
from time import perf_counter
# make a complete worksheet 100000 * 1000
start = perf_counter()
prod = product(range(1, 100000), range(1, 1000))
cells = {(x,y):x for x,y in prod}
print(len(cells))
print(f"Create time {perf_counter()-start:.2f}s")
clock = perf_counter()
# remove everything above row 50,000
keys = product(range(50000, 100000), range(1, 100))
# for x,y in keys:
# del cells[x, y]
for n in map(cells.pop, keys):
pass
print(len(cells))
stop = perf_counter()
print(f"Removal time {stop-clock:.2f}s")
10 миллионов элементов и более - обычное дело для некоторых настроек. Сравнивая два метода на моем локальном компьютере, я вижу небольшое улучшение при использовании mapи pop, предположительно из-за меньшего количества вызовов функций, но оба метода на моем компьютере занимают около 2,5 с. Но это меркнет по сравнению со временем, необходимым для создания словаря в первую очередь (55 с) или включением проверок в цикле. Если это вероятно, лучше всего создать набор, который является пересечением ключей словаря и вашего фильтра:
keys = cells.keys() & keys
В итоге: delон уже сильно оптимизирован, поэтому не беспокойтесь об его использовании.