Проверьте, существует ли данный ключ в словаре
Чтобы понять, как это сделать, мы сначала проверим, какие методы мы можем вызвать в словаре. Вот методы:
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:
.