Було б непогано мати повну підтримку встановлених методів для словників (а не нечестивий безлад, який ми отримуємо з Python 3.9), щоб ви могли просто «видалити» набір ключів. Однак, поки це не так, і у вас є великий словник з потенційно великою кількістю клавіш, який потрібно видалити, ви, можливо, захочете дізнатися про продуктивність. Отже, я створив якийсь код, який створює щось досить велике для змістовного зіставлення: матриця 100 000 х 1000, тобто загалом 10 000,00 елементів.
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 секунд на моїй машині. Але це бледнее порівняно з часом, необхідним для створення словника в першу чергу (55s), або включаючи перевірки всередині циклу. Якщо це можливо, тоді найкраще створити набір, який є перетином клавіш словника та вашого фільтра:
keys = cells.keys() & keys
Підсумовуючи це: del
вже сильно оптимізовано, тому не хвилюйтеся використовувати його.