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

การรวม (Merge) หลาย Dictionary ใน Python

รวมหลาย Dictionary ให้กลายเป็น Dictionary เดียว

วิธีที่ 1: Loop + update() (Classic)

>> d = [{'a': 1, 'b': 2, 'c': 3}, {'a': 1, 'd': 2, 'c': 'foo'}, {'e': 57, 'c': 3}]
>>> merged = {}
>>> for x in d:
...     merged.update(x)
>>> merged
{'a': 1, 'b': 2, 'c': 3, 'd': 2, 'e': 57}

หมายเหตุ: Key ซ้ำ ('a', 'c') จะใช้ค่าจาก dict ที่มาก่อน (last one wins)

วิธีที่ 2: Dictionary Unpacking (Python 3.5+)

>> merged = {}
>>> for x in d:
...     merged = {**merged, **x}
>>> merged
{'a': 1, 'b': 2, 'c': 3, 'd': 2, 'e': 57}

วิธีที่ 3: dict() + ChainMap (ไม่แก้ไข original)

>> from collections import ChainMap
>>> merged = dict(ChainMap(*reversed(d)))
>>> merged
{'a': 1, 'b': 2, 'c': 3, 'd': 2, 'e': 57}

วิธีที่ 4: Merge Operator | (Python 3.9+)

>> merged = {}
>>> for x in d:
...     merged |= x
>>> merged
{'a': 1, 'b': 2, 'c': 3, 'd': 2, 'e': 57}

# หรือ one-liner (right-most wins)
>>> merged = {}
>>> for x in reversed(d):
...     merged = x | merged
>>> merged
{'a': 1, 'b': 2, 'c': 3, 'd': 2, 'e': 57}

สรุป: Key ซ้ำ → ค่าใดชนะ?

Python ใช้กฎ Last One Wins (ค่าจาก dict ที่รวมทีหลังจะทับทีหน้า)