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

Flatten List of Dictionaries ใน Python: รวม Dictionary หลายตัวเป็นตัวเดียว

ได้ลิสต์ที่แต่ละสมาชิกเป็น Dictionary ต้องการรวมเป็น Dictionary เดียว

วิธี 1: ใช้ for กับ update()

listA = [{'Mon':2}, {'Tue':11}, {'Wed':3}]
res = {}
for d in listA:
    res.update(d)
print(res)  # {'Mon': 2, 'Tue': 11, 'Wed': 3}

วิธี 2: ใช้ functools.reduce กับ update()

from functools import reduce
listA = [{'Mon':2}, {'Tue':11}, {'Wed':3}]
res = reduce(lambda d, src: d.update(src) or d, listA, {})
print(res)  # {'Mon': 2, 'Tue': 11, 'Wed': 3}

วิธี 3: ใช้ collections.ChainMap (ไม่สร้าง dict ใหม่ แต่มองเป็น dict เดียว)

from collections import ChainMap
listA = [{'Mon':2}, {'Tue':11}, {'Wed':3}]
res = ChainMap(*listA)
print(res)           # ChainMap({'Mon': 2}, {'Tue': 11}, {'Wed': 3})
print(dict(res))     # {'Mon': 2, 'Tue': 11, 'Wed': 3} (ถ้าต้องการ dict จริง)

สรุป

  • update/reduce: สร้าง dict ใหม่ คีย์ซ้ำค่าตัวหลังทับตัวหน้า
  • ChainMap: ไม่คัดลอกข้อมูล ใช้หน่วยความอยน้อย คีย์ซ้ำค่าตัวแรกชนะ