วิธี Filter ข้อมูลใน Python Dict เอาเฉพาะ Key ที่เราต้องการ

อันนี้เหมือนจะใช้บ่อย ขอเอามาแปะไว้สักหน่อย บางทีข้อมูลที่เราดึงมามีข้อมูลเกินความจำเป็น แล้วเราอยากจะ filter ออกครับ

โอเค สมมุติว่าเรามี Python dict ประมาณนี้

data = {
    "name": "Kan",
    "surname": "Ouivirach",
    "position": "Someone",
}

แล้วเราอยากจะได้ key เฉพาะ name กับ position เราสามารถใช้ dictionary comprehension ได้

keys = ["name", "position"]
x = {k: data[k] for k in data if k in keys}

ผลที่ได้ก็ตามนี้

{"name": "Kan", "position": "Someone"}

แล้วถ้าเราอยากจะ filter พวก key ที่เราไม่ต้องการล่ะ? เราก็แก้โค้ดด้านบน เติม not เข้าไปใน if แบบนี้เลย

keys = ["name", "position"]
x = {k: data[k] for k in data if k not in keys}

ผลคือ

{"surname": "Ouivirach"}

อีกทางใช้ประโยชน์จาก dict.items() ก็ได้นะครับ จะได้ key value pair มาแทนที่จะใช้ key lookup หาตรง value แบบ data[k] อีกรอบ

{key: value for key, value in data.items() if key in ('name', 'position' )}
2 Likes

ปกติจะ filter dict key ตอนทำ lambda function (สำหรับ API) ตอนออก final output

ท่าปกติที่ใช้คือ จับโยนเข้า pydantic แล้วมันจะจัดการต่อให้เอง
ข้อดีคือ ถ้า validate ไม่ผ่าน มันจะบอกให้หมดเลยว่าพังที่ตำแหน่งไหน ประหยัดเวลาไม่ต้องทำ exception เอง

1 Like