Sería bueno tener un soporte completo para los métodos establecidos para los diccionarios (y no el lío impuro que estamos teniendo con Python 3.9) para que simplemente pueda "eliminar" un conjunto de claves. Sin embargo, mientras ese no sea el caso, y tenga un diccionario grande con una cantidad potencialmente grande de claves para eliminar, es posible que desee saber sobre el rendimiento. Entonces, he creado un código que crea algo lo suficientemente grande como para realizar comparaciones significativas: una matriz de 100,000 x 1000, por lo que 10,000,00 artículos en total.
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 millones de artículos o más no es inusual en algunos entornos. Comparando los dos métodos en mi máquina local, veo una ligera mejora al usarlo mapy pop, presumiblemente debido a menos llamadas de función, pero ambas toman alrededor de 2.5s en mi máquina. Pero esto palidece en comparación con el tiempo requerido para crear el diccionario en primer lugar (55s), o incluir verificaciones dentro del ciclo. Si esto es probable, es mejor crear un conjunto que sea una intersección de las teclas del diccionario y su filtro:
keys = cells.keys() & keys
En resumen: delya está muy optimizado, así que no se preocupe por usarlo.