Вступление
Словарь (также известный как «карта», «хэш» или «ассоциативный массив»)
- это встроенный контейнер Python, в котором элементы хранятся в виде пары ключ-значение.
Как и в других контейнерах с числовой индексацией, здесь мы используем ключи в качестве индексов. Ключи могут быть числовыми или строковыми значениями. Однако никакая изменяемая последовательность или объект не может использоваться в качестве ключа, как список.
В этой статье мы рассмотрим, как проверить, существует ли ключ в словаре Python .
В примерах мы будем использовать этот словарь fruits_dict
fruits_dict = dict(apple= 1, mango= 3, banana= 4)
{'apple': 1, 'banana': 4, 'mango': 3}
Проверьте, существует ли ключ, используя в Operator
Самый простой способ проверить, существует ли ключ в словаре, -
использовать оператор in
Это специальный оператор, используемый для
оценки принадлежности значения.
Здесь будет либо True
если ключ существует, либо False
если нет:
key = 'orange'
if key in fruits_dict:
print('Key Found')
else:
print('Key not found')
Теперь, когда orange
, вот результат:
Key not found
Это предполагаемый и предпочтительный подход большинства разработчиков.
Под капотом он использует __contains__()
чтобы проверить, находится ли
данный ключ in
словаре или нет.
Проверьте, существует ли ключ, используя get ()
Функция get()
принимает key
и необязательное значение, которое
должно быть возвращено, если key
не найден. По умолчанию это
необязательное значение - None
. Мы можем попробовать получить ключ, и
если возвращенное значение None
, это означает, что его нет в словаре:
key = 'orange'
if fruits_dict.get(key) == None:
print('Key not found')
else:
print('Key found')
Это приводит к:
Key not found
Проверьте, существует ли ключ, используя keys ()
Функция keys()
возвращает ключи из нашего словаря в виде
последовательности:
fruits_dict.keys()
Эта последовательность содержит:
dict_keys(['apple', 'mango', 'banana'])
Используя эту последовательность, мы можем проверить, присутствует ли
ключ. Вы можете сделать это с помощью цикла или, что еще лучше,
использовать оператор in
key = 'orange'
if key in fruits_dict.keys():
print('Key found')
else:
print('Key not found')
Это также приводит к:
Key not found
Проверьте, существует ли ключ, используя has_key ()
Вместо того, чтобы вручную получать ключи и проверять, присутствует ли
has_key()
:
key = 'orange'
if fruits_dict.has_key(key):
print('Key found')
else:
print('Key not found')
Он возвращает True
или False
зависимости от наличия ключа. Этот код
выводит:
Key not found
Обработка исключения KeyError
Интересный способ избежать проблем с несуществующим ключом или, другими
словами, проверить, существует ли ключ в нашем словаре или нет, - это
использовать предложение try
и except
для обработки исключения
KeyError
Следующее исключение возникает всякий раз, когда нашей программе не удается найти соответствующий ключ в словаре.
Это простой, элегантный и быстрый способ поиска ключей:
try:
fruits_dict[key]
except KeyError as err:
print('Key not found')
Этот подход, хотя он может показаться не интуитивным, на самом деле значительно быстрее, чем некоторые другие подходы, которые мы рассмотрели до сих пор.
Примечание. Обратите внимание, что исключения не следует использовать для изменения потока кода или для реализации логики. Они стреляют очень быстро, но оправляются от них очень медленно. По возможности не следует отдавать предпочтение этому подходу по сравнению с другими подходами.
Давайте сравним их производительность, чтобы лучше понять, насколько быстро они могут выполняться.
Сравнение производительности
import timeit
code_setup = """
key = 'orange'
fruits_dict = dict(apple= 1, mango= 3, banana= 4)
"""
code_1 = """
if key in fruits_dict:
# print('Key Found')
pass
else:
# print('Key not found')
pass
"""
code_2 = """
if fruits_dict.get(key):
# print('Key found')
pass
else:
# print('Key not found')
pass
"""
code_3 = """
if fruits_dict.__contains__(key):
# print('Key found')
pass
else:
# print('Key not found')
pass
"""
code_4 = """
try:
# fruits_dict[key]
pass
except KeyError as err:
# print('Key not found')
pass
"""
code_5 = """
if key in fruits_dict.keys():
# print('Key found')
pass
else:
# print('Key not found')
pass
"""
print('Time of code_1: ', timeit.timeit(setup = code_setup , stmt= code_1, number= 10000000))
print('Time of code_2: ', timeit.timeit(setup = code_setup , stmt= code_2, number= 10000000))
print('Time of code_3: ', timeit.timeit(setup = code_setup , stmt= code_3, number= 10000000))
print('Time of code_4: ', timeit.timeit(setup = code_setup , stmt= code_4, number= 10000000))
print('Time of code_5: ', timeit.timeit(setup = code_setup , stmt= code_5, number= 10000000))
Это выводит:
Time of code_1: 0.2753713619995324
Time of code_2: 0.8163219139996727
Time of code_3: 0.5563563220002834
Time of code_4: 0.1561058730003424
Time of code_5: 0.7869278369998938
Самый популярный вариант и подход - использование in
- довольно
быстрый, и это также предполагаемый подход для решения этой проблемы.
Заключение
В этой статье мы обсудили несколько способов проверить, существует ли ключ в нашем словаре или нет. Затем мы провели сравнение производительности.