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

การ Merge สอง Dictionary ใน Expression เดียวใน Python

รวม Dictionary สองตัวให้กลายเป็นหนึ่งตัวในบรรทัดเดียว

วิธีที่ 1: update() (In-place, Python ทุกเวอร์ชัน)

>> a = {1: 'a', 2: 'b', 3: 'c'}
>>> b = {'x': 1, 'y': 2, 'z': 3}
>>> a.update(b)
>>> a
{1: 'a', 2: 'b', 3: 'c', 'x': 1, 'y': 2, 'z': 3}

ข้อควรระวัง: update() แก้ไข a inplace และคืนค่า None → ไม่สามารถ chain ได้

วิธีที่ 2: Dictionary Unpacking ** (Python 3.5+, สร้าง Dict ใหม่)

>> a = {1: 'a', 2: 'b', 3: 'c'}
>>> b = {'x': 1, 'y': 2, 'z': 3}
>>> c = {**a, **b}
>>> c
{1: 'a', 2: 'b', 3: 'c', 'x': 1, 'y': 2, 'z': 3}

สร้าง Dictionary ใหม่ c โดยไม่เปลี่ยน a และ b

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

>> a = {1: 'a', 2: 'b', 3: 'c'}
>>> b = {'x': 1, 'y': 2, 'z': 3}
>>> c = a | b
>>> c
{1: 'a', 2: 'b', 3: 'c', 'x': 1, 'y': 2, 'z': 3}

>>> # In-place update
>>> a |= b
>>> a
{1: 'a', 2: 'b', 3: 'c', 'x': 1, 'y': 2, 'z': 3}

กฎ Key ซ้ำ (Last One Wins)

>> a = {'x': 1}
>>> b = {'x': 999}
>>> {**a, **b}
{'x': 999}  # ค่าจาก b (ขวา) ชนะ

>>> a | b
{'x': 999}

สรุปการเลือกใช้

เวอร์ชันแนะนำIn-placeสร้างใหม่
< 3.5update()✓copy() + update()
3.5 - 3.8{**a, **b}copy() + update()✓
≥ 3.9a | ba |= ba | b