ส่วนนี้จะอธิบายวิธีการเพิ่มองค์ประกอบใหม่ในพจนานุกรม (วัตถุประเภท dict) หรืออัปเดตค่าขององค์ประกอบที่มีอยู่ใน Python นอกจากนี้ยังเป็นไปได้ที่จะเชื่อม (เข้าร่วม, รวม) พจนานุกรมหลาย ๆ
- เพิ่มและอัปเดตองค์ประกอบในพจนานุกรมโดยระบุคีย์
- การต่อ (การรวม) ของพจนานุกรมหลายฉบับ: update (), | ตัวดำเนินการ | = ตัวดำเนินการ
- เพิ่มหรืออัปเดตหลายองค์ประกอบ: update (), | = ตัวดำเนินการ
เพิ่มและอัปเดตองค์ประกอบในพจนานุกรมโดยระบุคีย์
คุณสามารถเพิ่ม / อัปเดตองค์ประกอบพจนานุกรมได้ด้วยวิธีต่อไปนี้
วัตถุพจนานุกรม [คีย์] = ค่า
เมื่อระบุคีย์ที่ไม่มีอยู่จริงองค์ประกอบใหม่จะถูกเพิ่มและเมื่อระบุคีย์ที่มีอยู่ค่าที่มีอยู่จะถูกอัพเดต (เขียนทับ)
d = {'k1': 1, 'k2': 2}
d['k3'] = 3
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}
d['k1'] = 100
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3}
หากคุณไม่ต้องการอัพเดตค่าของคีย์ที่มีอยู่ให้ใช้เมธอด setdefault ()
เชื่อมต่อ (รวม) พจนานุกรมหลายรายการ: update (), | ตัวดำเนินการ | = ตัวดำเนินการ
update()
หากมีการระบุอ็อบเจ็กต์พจนานุกรมอื่นเป็นอาร์กิวเมนต์สำหรับการอัพเดตเมธอดของอ็อบเจ็กต์พจนานุกรมองค์ประกอบทั้งหมดจะถูกเพิ่ม
หากคีย์ซ้อนทับกับคีย์ที่มีอยู่คีย์นั้นจะถูกเขียนทับด้วยค่าของพจนานุกรมที่ระบุในอาร์กิวเมนต์
d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}
d1.update(d2)
print(d1)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
เป็นข้อผิดพลาดในการระบุพจนานุกรมหลายรายการในอาร์กิวเมนต์ update ()
d1 = {'k1': 1, 'k2': 2}
d2 = {'k3': 3, 'k4': 4}
d3 = {'k5': 5, 'k6': 6}
# d1.update(d2, d3)
# TypeError: update expected at most 1 arguments, got 2
ตามที่อธิบายไว้ในภายหลัง update () สามารถเพิ่มองค์ประกอบใหม่เป็นอาร์กิวเมนต์คำหลัก (คีย์ = ค่า) ดังนั้นเพียงแค่เพิ่ม ** ลงในพจนานุกรมและขยายแต่ละองค์ประกอบเป็นอาร์กิวเมนต์คำหลักและส่งต่อไป
d1.update(**d2, **d3)
print(d1)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}
ดังตัวอย่างก่อนหน้านี้การใช้ update () จะอัปเดตออบเจ็กต์พจนานุกรมต้นฉบับ
หากคุณต้องการสร้างพจนานุกรมใหม่โดยการรวมพจนานุกรมหลาย ๆ พจนานุกรมให้ใช้ {** d1, ** d2} (จาก Python 3.5) หรือ dict (** d1, ** d2)
ใน Python 3.9 ขึ้นไปคุณสามารถสร้างพจนานุกรมใหม่โดยใช้ | ผู้ประกอบการอธิบายต่อไป
| ตัวดำเนินการ | = ตัวดำเนินการ (Python 3.9 ขึ้นไป)
เนื่องจาก Python 3.9 เป็นไปได้ที่จะรวมพจนานุกรมสองพจนานุกรมโดยใช้ | ตัวดำเนินการ เมื่อพจนานุกรมสองเล่มมีคีย์เดียวกันค่าทางด้านขวาจะมีลำดับความสำคัญ
d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}
print(d1 | d2)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
print(d2 | d1)
# {'k1': 1, 'k3': 3, 'k4': 4, 'k2': 2}
| นอกจากนี้ยังสามารถรวมพจนานุกรมหลายชุดได้โดยใช้ตัวดำเนินการหลายชุด
d1 = {'k1': 1, 'k2': 2}
d2 = {'k3': 3, 'k4': 4}
d3 = {'k5': 5, 'k6': 6}
print(d1 | d2 | d3)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}
+ เช่นเดียวกับการอัปเดต () วัตถุทางด้านซ้ายจะได้รับการอัปเดต
d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}
d1 |= d2
print(d1)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
เพิ่มหรืออัปเดตหลายองค์ประกอบ: update (), | = ตัวดำเนินการ
update()
เมื่อระบุอาร์กิวเมนต์คีย์เวิร์ด key = value ในเมธอด update () คีย์คีย์และค่าค่าจะถูกเพิ่ม หากคีย์ซ้อนทับกับคีย์ที่มีอยู่คีย์จะถูกเขียนทับด้วยค่าที่ระบุในอาร์กิวเมนต์
d = {'k1': 1, 'k2': 2}
d.update(k1=100, k3=3, k4=4)
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
นอกจากนี้ยังสามารถระบุรายการ (คีย์ค่า) เป็นอาร์กิวเมนต์ของเมธอด update () หากคีย์ซ้อนทับกับคีย์ที่มีอยู่คีย์นั้นจะถูกเขียนทับด้วยค่าที่ระบุเป็นอาร์กิวเมนต์
d = {'k1': 1, 'k2': 2}
d.update([('k1', 100), ('k3', 3), ('k4', 4)])
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
เมื่อใช้ร่วมกับฟังก์ชัน zip () คุณสามารถเพิ่มองค์ประกอบจากรายการคีย์และรายการค่าได้
d = {'k1': 1, 'k2': 2}
keys = ['k1', 'k3', 'k4']
values = [100, 3, 4]
d.update(zip(keys, values))
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
| = operator (Python 3.9 ขึ้นไป)
ด้วยตัวดำเนินการ | = รายการของ (คีย์ค่า) สามารถระบุได้ทางด้านขวา
d = {'k1': 1, 'k2': 2}
d |= [('k1', 100), ('k3', 3), ('k4', 4)]
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
โปรดทราบว่าการระบุรายการด้วย | ตัวดำเนินการจะทำให้เกิดข้อผิดพลาด รองรับเฉพาะการดำเนินการจากพจนานุกรมถึงพจนานุกรมเท่านั้น
# print(d | [('k1', 100), ('k3', 3), ('k4', 4)])
# TypeError: unsupported operand type(s) for |: 'dict' and 'list'