Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีลบรายการจาก Dictionary ขณะวนลูปใน Python

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 ควรสร้างลิสต์คีย์ที่ต้องการลบก่อน แล้วค่อยลบในลูปแยกต่างหาก