การเพิ่มองค์ประกอบลงในพจนานุกรมและการเข้าร่วมพจนานุกรมใน Python

ธุรกิจ

ส่วนนี้จะอธิบายวิธีการเพิ่มองค์ประกอบใหม่ในพจนานุกรม (วัตถุประเภท 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'