Вопрос-Ответ

Check if a given key already exists in a dictionary

Проверьте, существует ли данный ключ уже в словаре

Я хотел проверить, существует ли ключ в словаре, прежде чем обновлять значение для ключа. Я написал следующий код:

if 'key1' in dict.keys():
print "blah"
else:
print "boo"

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

Переведено автоматически
Ответ 1

in проверяет наличие ключа вdict:

d = {"key1": 10, "key2": 23}

if "key1" in d:
print("this will execute")

if "nonexistent key" in d:
print("this will not")

Используйте dict.get() для предоставления значения по умолчанию, когда ключ не существует:

d = {}

for i in range(100):
key = i % 10
d[key] = d.get(key, 0) + 1

Чтобы предоставить значение по умолчанию для каждого ключа, используйте dict.setdefault() при каждом назначении:

d = {}

for i in range(100):
d[i % 10] = d.setdefault(i % 10, 0) + 1

... или, что лучше, используйте defaultdict из collections модуля:

from collections import defaultdict

d = defaultdict(int)

for i in range(100):
d[i % 10] += 1
Ответ 2

Используйте key in my_dict напрямую вместо key in my_dict.keys():

if 'key1' in my_dict:
print("blah")
else:
print("boo")

Это будет намного быстрее, поскольку использует хеширование O (1) по словарю, в отличие от выполнения O (n) линейного поиска по списку ключей.

Ответ 3

Вы можете проверить наличие ключа в словаре, используя ключевое слово in:

d = {'a': 1, 'b': 2}
'a' in d # <== evaluates to True
'c' in d # <== evaluates to False

Обычным способом проверки существования ключа в словаре перед его изменением является инициализация значения по умолчанию (например, если ваши значения представляют собой списки, и вы хотите убедиться, что существует пустой список, к которому вы можете добавить при вставке первого значения для ключа). В подобных случаях вас может заинтересовать collections.defaultdict() тип.

В более старом коде вы также можете найти некоторые варианты использования has_key(), устаревшего метода проверки наличия ключей в словарях (просто используйте key_name in dict_name вместо этого).

Ответ 4

Вы можете сократить свой код до этого:

if 'key1' in my_dict:
...

Однако это в лучшем случае косметическое улучшение. Почему вы считаете, что это не лучший способ?

2023-07-16 17:58 python dictionary