ตรวจสอบว่ามีรหัสที่กำหนดอยู่แล้วในพจนานุกรมหรือไม่
เพื่อให้ได้แนวคิดว่าจะทำอย่างไรก่อนอื่นเราตรวจสอบวิธีการที่เราสามารถเรียกใช้พจนานุกรม นี่คือวิธีการ:
d={'clear':0, 'copy':1, 'fromkeys':2, 'get':3, 'items':4, 'keys':5, 'pop':6, 'popitem':7, 'setdefault':8, 'update':9, 'values':10}
Python Dictionary clear() Removes all Items
Python Dictionary copy() Returns Shallow Copy of a Dictionary
Python Dictionary fromkeys() Creates dictionary from given sequence
Python Dictionary get() Returns Value of The Key
Python Dictionary items() Returns view of dictionary (key, value) pair
Python Dictionary keys() Returns View Object of All Keys
Python Dictionary pop() Removes and returns element having given key
Python Dictionary popitem() Returns & Removes Element From Dictionary
Python Dictionary setdefault() Inserts Key With a Value if Key is not Present
Python Dictionary update() Updates the Dictionary
Python Dictionary values() Returns view of all values in dictionary
วิธีการที่โหดเหี้ยมเพื่อตรวจสอบว่ากุญแจมีอยู่แล้วอาจเป็นget()
วิธีการ:
d.get("key")
อีกสองวิธีที่น่าสนใจitems()
และkeys()
ฟังดูเหมือนจะทำงานมากเกินไป ลองตรวจสอบดูว่าget()
เป็นวิธีที่เหมาะสมสำหรับเราหรือไม่ เรามี พ.ร.บ. ของเราd
:
d= {'clear':0, 'copy':1, 'fromkeys':2, 'get':3, 'items':4, 'keys':5, 'pop':6, 'popitem':7, 'setdefault':8, 'update':9, 'values':10}
การพิมพ์แสดงให้เห็นถึงกุญแจที่เรายังไม่ได้รับNone
:
print(d.get('key')) #None
print(d.get('clear')) #0
print(d.get('copy')) #1
เราอาจใช้ข้อมูลนั้นเพื่อรับข้อมูลหากมีคีย์หรือไม่ แต่ให้พิจารณาสิ่งนี้หากเราสร้าง dict ด้วยซิงเกิลkey:None
:
d= {'key':None}
print(d.get('key')) #None
print(d.get('key2')) #None
ชั้นนำที่เป็นวิธีการที่ไม่น่าเชื่อถือในกรณีค่าบางอย่างอาจจะget()
None
เรื่องนี้ควรจบลงอย่างมีความสุข หากเราใช้เครื่องมือin
เปรียบเทียบ:
print('key' in d) #True
print('key2' in d) #False
เราได้ผลลัพธ์ที่ถูกต้อง เราอาจตรวจสอบรหัสไบต์ Python:
import dis
dis.dis("'key' in d")
# 1 0 LOAD_CONST 0 ('key')
# 2 LOAD_NAME 0 (d)
# 4 COMPARE_OP 6 (in)
# 6 RETURN_VALUE
dis.dis("d.get('key2')")
# 1 0 LOAD_NAME 0 (d)
# 2 LOAD_METHOD 1 (get)
# 4 LOAD_CONST 0 ('key2')
# 6 CALL_METHOD 1
# 8 RETURN_VALUE
นี้แสดงให้เห็นว่าin
ผู้ประกอบการเปรียบเทียบไม่ได้เป็นเพียงความน่าเชื่อถือ get()
แต่ถึงแม้จะเร็วกว่า
dict.keys()
สร้างรายการคีย์ตามเอกสารdocs.python.org/2/library/stdtypes.html#dict.keysแต่ฉันต้องแปลกใจหากรูปแบบนี้ไม่เหมาะสำหรับการแปลที่จริงจังif 'key1' in dict:
ไปยัง