จะเป็นการดีที่จะได้รับการสนับสนุนอย่างเต็มที่สำหรับวิธีการตั้งค่าสำหรับพจนานุกรม (และไม่ใช่เรื่องที่ไม่บริสุทธิ์ที่เราได้รับจาก Python 3.9) เพื่อให้คุณสามารถ "ลบ" ชุดคีย์ได้ อย่างไรก็ตามตราบใดที่ไม่เป็นเช่นนั้นและคุณมีพจนานุกรมขนาดใหญ่ที่มีคีย์จำนวนมากให้ลบคุณอาจต้องการทราบเกี่ยวกับประสิทธิภาพ ดังนั้นฉันได้สร้างโค้ดบางอย่างที่สร้างบางสิ่งที่ใหญ่พอสำหรับการเปรียบเทียบที่มีความหมาย: เมทริกซ์ 100,000 x 1,000 ดังนั้นรวม 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 วินาทีในเครื่องของฉัน แต่สิ่งนี้จะเกิดขึ้นเมื่อเทียบกับเวลาที่ต้องใช้ในการสร้างพจนานุกรมตั้งแต่แรก (55 วินาที) หรือรวมถึงการตรวจสอบภายในลูป หากเป็นไปได้ควรสร้างชุดที่เป็นจุดตัดของคีย์พจนานุกรมและตัวกรองของคุณ:
keys = cells.keys() & keys
โดยสรุป: del
ได้รับการปรับให้เหมาะสมอย่างมากแล้วดังนั้นอย่ากังวลกับการใช้งาน