Alangkah baiknya memiliki dukungan penuh untuk metode set untuk kamus (dan bukan kekacauan tidak suci yang kita dapatkan dengan Python 3.9) sehingga Anda bisa "menghapus" satu set kunci. Namun, selama bukan itu masalahnya, dan Anda memiliki kamus besar dengan kemungkinan sejumlah besar kunci untuk dihapus, Anda mungkin ingin tahu tentang kinerjanya. Jadi, saya telah membuat beberapa kode yang membuat sesuatu yang cukup besar untuk perbandingan yang bermakna: matriks 100.000 x 1000, jadi total 10.000,00 item.
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 juta item atau lebih bukanlah hal yang aneh di beberapa pengaturan. Membandingkan dua metode pada mesin lokal saya, saya melihat sedikit peningkatan saat menggunakan map
dan pop
, mungkin karena panggilan fungsi yang lebih sedikit, tetapi keduanya memakan waktu sekitar 2,5 detik pada mesin saya. Tapi ini artinya jika dibandingkan dengan waktu yang dibutuhkan untuk membuat kamus di tempat pertama (55-an), atau termasuk pemeriksaan dalam loop. Jika ini mungkin terjadi, sebaiknya buat set yang merupakan perpotongan dari kunci kamus dan filter Anda:
keys = cells.keys() & keys
Singkatnya: del
sudah sangat dioptimalkan, jadi jangan khawatir tentang menggunakannya.