У меня есть словарь Python, пример структуры которого приведен ниже (отрывок):
items = {
"Google": "Mountain View",
"Johnson & Johnson": "New Brunswick",
"Apple": "Cupertino",
}
Теперь у меня есть строка, а именно str1
. Я хочу посмотреть, есть ли в строке str1
какой-либо из ключей из словаря items
, например, если у меня есть строка типа Where is Google based out of?
. Первоначально я написал этот псевдокод:
for str_word in str1.split():
if str_word in items:
print("Key found. Value is = ".format(items[str_word]))
Теперь это хорошо, так как ключи словаря проиндексированы / хешированы. Таким образом, время выполнения оператора in
является постоянным, но, как вы можете заметить, это прекрасно работает для таких слов, как Google
или Apple
, но это не будет работать для Johnson & Johnson
(если моя строка Where is Jonhnson & Johnson based out of?
).
Другой способ, о котором я могу подумать, - это сначала извлечь все ключи из словаря, а затем выполнить итерацию по одному для каждого ключа и посмотреть, присутствует ли он в str1
(обратный способ первого подхода). Это увеличит время выполнения, так как мой словарь огромен с сотнями или тысячами ключей.
Я хочу знать, есть ли способ, которым я могу изменить свой первый подход, чтобы подсчитать возможность сопоставления подстроки с ключами словаря, который может содержать несколько слов, таких как Johnson & Johnson
?