Python: проверьте, существует ли ключ в словаре

Введение Словарь (также известный как «карта», «хэш» или «ассоциативный массив») - это встроенный контейнер Python, в котором элементы хранятся в виде пары ключ-значение. Как и в других контейнерах с числовой индексацией, здесь мы используем ключи в качестве индексов. Ключи могут быть числовыми или строковыми значениями. Однако никакая изменяемая последовательность или объект не может использоваться в качестве ключа, как список. В этой статье мы рассмотрим, как проверить, существует ли ключ в словаре Python. В примерах мы будем использовать этот словарь fruit_dict:

Вступление

Словарь (также известный как «карта», «хэш» или «ассоциативный массив»)

  • это встроенный контейнер 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 - довольно быстрый, и это также предполагаемый подход для решения этой проблемы.

Заключение

В этой статье мы обсудили несколько способов проверить, существует ли ключ в нашем словаре или нет. Затем мы провели сравнение производительности.

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus