python обработка списка исключений
Логическая задачка, на которую я не нашёл ответа(или не смог правильно сформулировать вопрос).
Есть список артистов. Из него по неким параметрам, находится список их имён. Далее, по полученному списку, производится поиск этих имён во втором списке. Проблема в том, что во втором списке, кроме полностью совпадающих есть большое множество по разному отличающихся в написании имён. Например:
| 1й список | 2й список |
|---|---|
| Алла Пугачёва | Алла Пугачёва |
| Стинг | Sting |
| Keb' Mo' | Keb'Mo' |
| Pink | P!nk |
| Пинк | P!nk |
итд. итп.
Таких исключений очень большое количество и нет никакой закономерности по которой их можно было бы классифицировать. Поэтому я планирую, понемногу наполнять в скрипте массив или список, в котором можно было бы обрабатывать такие исключения.
Но вот никак не соображу как это правильно сделать. Через if не вариант, потому, что список исключений будет очень большой и таким образом скрипт станет угрожающе большим.
Нужно какой-то компактный и лаконичный способ обработки 1го списка, в котором перед поиском по второму списку:
Pink или Пинк, заменялся бы на P!nk
Стинг на Sting
а Алла Пугачёва искалась бы как есть.
Как пример, того, что мне нужно я напишу используя if, однако, как я сказал выше, нужно что-то компактнее.
if name == Стинг:
name = Sting
if name == Pink or name == Пинк:
name = P!nk
Мне кажется, нужно как-то использовать массивы или списки, но нужно сразу же в них, создать и приравнивание.
Скрипт пишется на phyton
Спасибо.
Ответы (1 шт):
Спасибо Сергею Шашко, который направил меня в нужном направлении. Решением было, совершенно верно предложено использовать словарь. В моём случае, код который я хотел получить, выглядит примерно так:
artist_names_1 = ["Алла Пугачёва", "Keb' Mo'", "Стинг", "Pink", "Пинк"] #1й список
artist_names_2 = ["Алла Пугачёва", "Keb'Mo'", "Sting", "P!nk"] #2й список
my_dict = {"Keb' Mo'":"Keb'Mo'", "Стинг":"Sting", "Pink":"P!nk", "Пинк":"P!nk"} #список исключений
for artist_name in artist_names_1:
artist_name = my_dict.get(artist_name, artist_name)
print(artist_name)
>>>Алла Пугачёва
>>>Keb'Mo'
>>>Sting
>>>P!nk
>>>P!nk
Что в итоге даёт мне требуемый результат.
Алла Борисовна будет искаться ровно под своим именем, а артисты с искажёнными в исходном списке именами будут приведены к единому стандарту.
Таким же новичкам как я поясню, что происходит в этой строке:
artist_name = my_dict.get(artist_name, artist_name)
Методом get производится поиск по ключам словаря и возврат значения найденного ключа. Именно этот метод мне очень подходит, ведь если искомого ключа в словаре не будет найдено, то он вернёт не ошибку, а заданное после запятой значение по умолчанию (для которого я использую само искомое имя, исключение для которого не предусмотрено в словаре my_dict).
Возможно будут предложены ещё более оптимальные варианты, но я остановился на таком.