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

การจัดการคีย์ที่หายไปในพจนานุกรม Python


ใน Python มีหนึ่งคอนเทนเนอร์ที่เรียกว่าพจนานุกรม ในพจนานุกรม เราสามารถจับคู่คีย์กับค่าของมันได้ การใช้พจนานุกรมสามารถเข้าถึงค่าได้ในเวลาคงที่ แต่เมื่อไม่มีคีย์ที่ให้มา อาจเกิดข้อผิดพลาดบางอย่างได้

ในส่วนนี้เราจะมาดูวิธีจัดการกับข้อผิดพลาดประเภทนี้ หากเรากำลังพยายามเข้าถึงคีย์ที่หายไป ระบบอาจแสดงข้อผิดพลาดเช่นนี้

โค้ดตัวอย่าง

country_dict = {'India' : 'IN', 'Australia' : 'AU', 'Brazil' : 'BR'}
print(country_dict['Australia'])
print(country_dict['Canada']) # This will return error

ผลลัพธ์

AU
---------------------------------------------------------------------------
KeyErrorTraceback (most recent call last)
<ipython-input-2-a91092e7ee85> in <module>()
      2 
      3 print(country_dict['Australia'])
----> 4 print(country_dict['Canada'])# This will return error

KeyError: 'Canada'

การใช้ get() วิธีการจัดการกับ KeyError

เราสามารถใช้วิธีการรับเพื่อตรวจสอบกุญแจได้ วิธีนี้ใช้พารามิเตอร์สองตัว อันแรกคือคีย์ และอันที่สองคือค่าดีฟอลต์ เมื่อพบคีย์ มันจะคืนค่าที่เกี่ยวข้องกับคีย์ แต่เมื่อคีย์ไม่อยู่ มันจะคืนค่าดีฟอลต์ ซึ่งจะถูกส่งผ่านเป็นอาร์กิวเมนต์ที่สอง

โค้ดตัวอย่าง

country_dict = {'India' : 'IN', 'Australia' : 'AU', 'Brazil' : 'BR'}
print(country_dict.get('Australia', 'Not Found'))
print(country_dict.get('Canada', 'Not Found'))

ผลลัพธ์

AU
Not Found

การใช้ setdefault() วิธีการจัดการกับ KeyError

เมธอด setdefault() นี้คล้ายกับเมธอด get() นอกจากนี้ยังใช้สองอาร์กิวเมนต์เช่น get() อันแรกคือคีย์และอันที่สองคือค่าดีฟอลต์ ความแตกต่างเพียงอย่างเดียวของวิธีนี้คือ เมื่อมีคีย์ที่หายไป มันจะเพิ่มคีย์ใหม่ด้วยค่าเริ่มต้น

โค้ดตัวอย่าง

country_dict = {'India' : 'IN', 'Australia' : 'AU', 'Brazil' : 'BR'}
country_dict.setdefault('Canada', 'Not Present') #Set a default value for Canada
print(country_dict['Australia'])
print(country_dict['Canada'])

ผลลัพธ์

AU
Not Present

การใช้ defaultdict

defaultdict คือคอนเทนเนอร์ ตั้งอยู่ที่โมดูลคอลเลกชันใน Python defaultdict ใช้ค่าเริ่มต้นจากโรงงานเป็นอาร์กิวเมนต์ เริ่มแรกโรงงานเริ่มต้นถูกตั้งค่าเป็น 0 (จำนวนเต็ม) เมื่อไม่มีคีย์ ระบบจะคืนค่าโรงงานเริ่มต้น

เราไม่จำเป็นต้องระบุเมธอดซ้ำแล้วซ้ำเล่า ดังนั้นจึงให้วิธีที่เร็วกว่าสำหรับอ็อบเจ็กต์พจนานุกรม

โค้ดตัวอย่าง

import collections as col
#set the default factory with the string 'key not present'
country_dict = col.defaultdict(lambda: 'Key Not Present')
country_dict['India'] = 'IN'
country_dict['Australia'] = 'AU'
country_dict['Brazil'] = 'BR'
print(country_dict['Australia'])
print(country_dict['Canada'])

ผลลัพธ์

AU
Key Not Present