ได้ลิสต์ที่แต่ละสมาชิกเป็น 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: ไม่คัดลอกข้อมูล ใช้หน่วยความอยน้อย คีย์ซ้ำค่าตัวแรกชนะ