Можно ли увидеть, содержит ли значение словаря X строки? - PullRequest
0 голосов
/ 12 февраля 2020

Если у меня есть словарь, подобный следующему:

 dictionaryName = {'Key1':'Akins, Richard A. ', 'Key2':'Frederic, Matthew B. ', 'Key3':'Freeman, Gordon J. '}

Можно ли написать что-то, что могло бы принять, скажем, Richard A. или Richard и вернуть Key1?

Ответы [ 4 ]

2 голосов
/ 12 февраля 2020

Да, вы можете использовать adict.items ()

for k,v in adict.items():
    if "Richard A." in v:
        print(k)
# output: Key1
2 голосов
/ 12 февраля 2020

Вы в основном ищете нечеткий поиск, но кажется, что ваши dict ключи должны быть значениями и наоборот. Также не используйте dict в качестве имени переменной. Попробуйте что-то вроде этого:

next(k for k, v in data.items() if 'Richard' in v)
2 голосов
/ 12 февраля 2020

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

def search_dict(d, needle):
    return [k for k, v in d.items() if needle in v]

d = {'Key1':'Akins, Richard A. ', 'Key2':'Frederic, Matthew B. ', 'Key3':'Freeman, Gordon J. '}
print(search_dict(d, "Richard"))

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

def search_dict(d, needle):
    for k, v in d.items():
        if needle in v:
            return k
1 голос
/ 12 февраля 2020

Пример Python 3,6

example_dict = {'Key1':'Akins, Richard A. ', 'Key2':'Frederic, Matthew B. ', 'Key3':'Freeman, Gordon J. '}

def get_key(d, value):
  for k,v in d.items():
    if value in v:
      print(f'Key: {k}')
      return v

get_key(example_dict, 'Richard A')
...