Поиск ключа в словаре Python с помощью регулярных выражений - PullRequest
0 голосов
/ 08 октября 2019

У меня в словаре есть названия улиц и их значения, как и у вас. Ключи - строки, значения - целые. Я хочу написать небольшой фрагмент кода, который позволит мне напечатать все названия улиц, которые заканчиваются на "gatan", используя регулярное выражение.

dictionary = {Storgatan: 46, Talgvägen: 51, Malmstigen: 8, Huvudgatan: 3...}

import re 

ends_with= 'gatan$'
test_dictionary= dictionary 

m1 = re.match(ends_with,test_dictionary)
if m1 is not None:
    print(m1)

Это, однако, возвращает ошибку «ожидаемая строка или байтовоподобный объект».

Как мне легко это решить? Спасибо

Ответы [ 3 ]

2 голосов
/ 08 октября 2019

Если вам необходимо использовать регулярные выражения, вы можете использовать re.match при переборе словаря.

import re

dictionary = {'Storgatan': 46, 'Talgvägen': 51, 'Malmstigen': 8, 'Huvudgatan': 3}

regex = '.*gatan$'

results = [v for k, v in dictionary.items() if re.match(regex, k)]

print(results)

Вывод:

[46, 3]

Примечание: это будет медленно длябольшие словари

Если вам нужны только ключевые имена:

matching_keys = [k for k in dictionary if re.match(regex, k)]
1 голос
/ 08 октября 2019

Проще говоря, мы можем использовать key.endswith('gatan') следующим образом:

for key, val in dictionary.items():
    if isinstance(key, str) and not key.endswith('gatan'):
        # key not ending with `gatan`
       print(key, val)

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

filtered_dictionary = {key: val for key, val in dictionary.items() if not key.endswith('gatan')}
0 голосов
/ 08 октября 2019

Посмотрите документацию по регулярному выражению библиотеки . Ищите определение функции match. Вы увидите, что функция ожидает структуру данных string, а не dict.

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