Перевірте, чи вказаний ключ вже існує в словнику
Щоб отримати ідею, як це зробити, спочатку перевіримо, які методи можна викликати у словнику. Ось методи:
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
Ми можемо використовувати це для отримання інформації, якщо ключ присутній чи ні. Але врахуйте це, якщо ми створимо диктат із синглом 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:
.