딕셔너리에 대한 set 메소드를 완벽하게 지원하는 것이 좋을 것입니다 (파이썬 3.9에서 우리가 겪고있는 불성실 한 엉망이 아님). 그래서 단순히 키 세트를 "제거"할 수 있습니다. 그러나 그렇지 않고 제거 할 키가 많은 큰 사전이있는 한 성능에 대해 알고 싶을 수 있습니다. 그래서 저는 의미있는 비교를 위해 충분히 큰 무언가를 만드는 코드를 만들었습니다. 100,000 x 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")
일부 설정에서는 천만 개 이상의 항목이 드물지 않습니다. 내 로컬 컴퓨터에서 두 가지 방법을 비교하면 map
and를 사용할 때 약간의 개선을 보았습니다. pop
아마도 함수 호출이 적기 때문일 것입니다.하지만 둘 다 내 컴퓨터에서 약 2.5 초가 걸립니다. 그러나 이것은 처음에 사전을 만드는 데 필요한 시간 (55 초) 또는 루프 내에 수표를 포함하는 데 필요한 시간과 비교하면 부족합니다. 이것이 가능하다면 사전 키와 필터가 교차하는 집합을 만드는 것이 가장 좋습니다.
keys = cells.keys() & keys
요약하면 : del
이미 많이 최적화되어 있으므로 사용에 대해 걱정하지 마십시오.