Dictionary ใน Python เป็นโครงสร้างข้อมูลที่ไม่มีลำดับ แก้ไขได้ และเข้าถึงผ่านคีย์ (key) บทความนี้จะสำรวจวิธีการลบรายการออกจาก dictionary ขณะทำการวนลูป
1. ใช้คำสั่ง del พร้อมคีย์
วิธีนี้จะเก็บคีย์ที่ต้องการลบไว้ก่อน จากนั้นจึงใช้คำสั่ง del เพื่อลบคู่คีย์-ค่า (key-value pair) ของคีย์เหล่านั้นออกไป
ตัวอย่าง
# Dictionary ต้นฉบับ
ADict = {1: 'Mon', 2: 'Tue', 3: 'Wed', 4: 'Thu', 5: 'Fri'}
# หาคีย์ที่มีค่าเป็น 2 หรือ 3
to_del = [key for key in ADict if key in (2, 3)]
# ลบคีย์ที่ต้องการ
for key in to_del:
del ADict[key]
# แสดง Dictionary ใหม่
print(ADict)
ผลลัพธ์
{1: 'Mon', 4: 'Thu', 5: 'Fri'}
2. ใช้ list() กับคีย์
เราสามารถสร้างลิสต์จากคีย์ของ dictionary และใช้เงื่อนไขเพื่อเลือกคีย์ที่จะลบ ตัวอย่างด้านล่างจะลบเฉพาะคีย์ที่มีค่าเป็นเลขคู่ (หาร 2 ลงตัว)
ตัวอย่าง
# Dictionary ต้นฉบับ
ADict = {1: 'Mon', 2: 'Tue', 3: 'Wed', 4: 'Thu', 5: 'Fri'}
# วนลูปผ่านคีย์ (ใช้ list() เพื่อสร้างสำเนา)
for key in list(ADict):
if (key % 2) == 0:
del ADict[key]
# แสดง Dictionary ใหม่
print(ADict)
ผลลัพธ์
{1: 'Mon', 3: 'Wed', 5: 'Fri'}
3. ใช้ items() เพื่อลบ
แทนที่จะใช้คีย์โดยตรง เราสามารถใช้ items() ของ dictionary เพื่อเลือกรายการที่จะลบ แต่ยังต้องอ้างอิงคีย์เพื่อทำการลบจริง
ตัวอย่าง
# Dictionary ต้นฉบับ
ADict = {1: 'Mon', 2: 'Tue', 3: 'Wed', 4: 'Thu', 5: 'Fri'}
NewDict = []
# หาคีย์ที่มีค่าเป็น 'Tue' หรือ 'Fri'
for key, val in ADict.items():
if val in ('Tue', 'Fri'):
NewDict.append(key)
# ลบคีย์ที่เก็บไว้
for i in NewDict:
del ADict[i]
# แสดง Dictionary ใหม่
print(ADict)
ผลลัพธ์
{1: 'Mon', 3: 'Wed', 4: 'Thu'}
หมายเหตุ: การลบรายการขณะวนลูป dictionary โดยตรงจะทำให้เกิด RuntimeError ควรสร้างลิสต์คีย์ที่ต้องการลบก่อน แล้วค่อยลบในลูปแยกต่างหาก