def wordreplace(s, d):
"""Replaces words in string by dict d. # Thank you @Patrick Artner
for improving dict call to d.get(w, w)!"""
return ' '.join([ d.get(w, w) for w in s.split()])
# this was my old version:
# def wordreplace(s, d):
# """Replaces words in string by dict d."""
# return ' '.join([ d[w] if w in d else w for w in s.split()])
d = {'blvd': 'Boulevard', 'st': "Street", 'sw': 'SW', 's': "S", 'rd': '
Road'}
s1 = "2341 blvd"
s2 = "648 s Kingston rd"
s3 = "sw Beverly st"
wordreplace(s1, d)
# '2341 Boulevard'
wordreplace(s2, d)
# '648 S Kingston Road'
wordreplace(s3, d)
# 'SW Beverly Street'
s.split()
по умолчанию разделяется на один пробел и возвращает список слов строки s.Каждое слово загружается в переменную w.for w in s.split()
часть выражения списка.Часть перед for
определяет, что собирается в результирующем списке.
if w in d
означает: проверить, находится ли слово в данном словаре замены d
.Он смотрит на d.keys()
ключи словаря.При обнаружении возвращает значение словаря d[w]
.else
возвращает само слово w
.
Полученный список join
редактируется с использованием ' '
в качестве соединяющего элемента, поэтому список слов преобразуется в строку.
Выражения списка очень удобны и часто приводят к таким однострочным функциям.Настоятельно рекомендуем вам изучить их.
Вместо того, чтобы вводить все ключевые значения в словарную форму, вы также можете сделать:
keys = [ # list here all keys ]
vals = [ # list here all corresponding values in the right order ]
d = {k: vals[i] for i, k in enumerate(keys)}
Итак, вы снова можете использовать силу спискавыражения для создания с ними словаря.
# abstract it to a function
def lists2dict(keys_list, vals_list):
return {k, vals_list[i] for i, k in enumerate(key_list)}
# and then call:
d = lists2dict(keys, vals)