Проверьте шаблон ключа в словаре в Python - PullRequest
6 голосов
/ 17 сентября 2010
    dict1=({"EMP$$1":1,"EMP$$2":2,"EMP$$3":3})

Как проверить, существует ли EMP в словаре, используя python

   dict1.get("EMP##") ??

Ответы [ 5 ]

21 голосов
/ 17 сентября 2010

Не совсем понятно, что вы хотите сделать.

Вы можете переключаться между клавишами в dict клавишах выбора, используя метод startswith() :

>>> for key in dict1:
...     if key.startswith("EMP$$"):
...         print "Found",key
...
Found EMP$$1
Found EMP$$2
Found EMP$$3

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

>>> [value for key,value in dict1.items() if key.startswith("EMP$$")]
[1, 2, 3]

Если вы просто хотите узнать, соответствует ли ключ, вы можете использовать функцию any() :

>>> any(key.startswith("EMP$$") for key in dict1)
True
6 голосов
/ 17 сентября 2010

Этот подход кажется мне противоречащим намерениям словаря.

Словарь состоит из хеш-ключей, значения которых связаны с ними.Преимущество этой структуры в том, что она обеспечивает очень быстрый поиск (порядка O (1)).Выполняя поиск по ключам, вы сводите на нет это преимущество.

Я бы предложил реорганизовать ваш словарь.

dict1 = {"EMP$$": {"1": 1, "2": 2, "3": 3} }

Затем найти «EMP $$» так же просто, как

if "EMP$$" in dict1:
    #etc...
2 голосов
/ 17 сентября 2010

Вы должны быть более конкретны с тем, что вы хотите сделать. Однако при условии, что словарь вы дали:

 dict1={"EMP$$1":1, "EMP$$2":2, "EMP$$3":3}

Если вы хотите узнать, присутствует ли определенный ключ, прежде чем пытаться его запросить, вы можете:

dict1.has_key('EMP$$1') 
True

Возвращает True, поскольку dict1 имеет ключ EMP$$1.

Вы также можете забыть о проверке ключей и полагаться на возвращаемое по умолчанию значение dict1.get():

dict1.get('EMP$$5',0)
0

Возвращает 0 по умолчанию, учитывая, что dict1 не имеет ключа EMP$$5.

Аналогичным образом вы также можете использовать структуру `try / исключением / для обнаружения и обработки пропущенных ключей:

try:
    dict1['EMP$$5']
except KeyError, e:
    # Code to deal w key error
    print 'Trapped key error in dict1 looking for %s' % e

Другие ответы на этот вопрос также великолепны, но нам нужно больше информации, чтобы быть более точным.

0 голосов
/ 05 февраля 2019

Вы можете использовать in оператор строки, который проверяет, находится ли элемент в другой строке. Итератор dict1 возвращает список ключей, поэтому вы проверяете «EMP $$» для каждого dict1.key.

dict1 = {"EMP$$1": 1, "EMP$$2": 2, "EMP$$3": 3}

print(any("EMP$$" in i for i in dict1))
# True

# testing for item that doesn't exist
print(any("AMP$$" in i for i in dict1))
# False
0 голосов
/ 17 сентября 2010

Нет способа сопоставить словарные ключи, как это. Я предлагаю вам пересмотреть свою структуру данных для этой проблемы. Если это должно быть очень быстро, вы можете использовать что-то вроде суффиксного дерева.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...