Второй одинковый объект в списке не отражается

Столкнулся с проблемой,что при нахождении определённых символов в array, программа просто игнорирует такой же второй элемент, и в output показывает то,что было в input.

К пример вот мой код:

list = str(input()).split()

dict = {"X-(": "Angry",
        "</3": "Broken Heart",
        ":_(": "Crying",
        ":*)": "Drunk",
        "|-O": "Yawn",
        ";)": "Winking",
        ":-)*": "Kiss",
        ";-)": "Winking",
        ":S": "Sarcastic",
        ":-(": "Sad",
        "XD": "Laughing",
        ":)": "Happy",
        ":-)": "Happy",
        ":-*":"Kiss",
        ":-P": "Frustrated"}

for key,value in dict.items():
    if key in list:
        b = list.index(key)
        list[b] = value
    else:
        pass
print(' '.join(list))

В этом коде пользователь вводит текст в виде смайликов, и программа выдёт ему перевеённые в текст смайлики.

Если ввести такой текст: I like you so much How its going :-P :-P

То он выведет: I like you so much How its going Frustrated :-P

В этом и является проблема,что при виде второго же такого символа в input он его игнорирует и оставляет таким же.


Ответы (2 шт):

Автор решения: GrAnd

Замените

if key in list:

на

while key in list:

И да, не называйте переменные list, dict и т.п. (именами встроенных типов/функций) Сами же рано или поздно на свои же грабли наступите.

→ Ссылка
Автор решения: CrazyElf

Вообще это всё делается гораздо короче (переменные я переобозвал, чтобы не было пересечения с встроенными типами питона):

print(' '.join(dict_.get(w, w) for w in list_))

Просто перебираете слова и заменяете по словарю. Где не находит слово в словаре - оставляет исходное. Для этого используется второй параметр метода .get словаря, там прописывается, что должен выдавать словарь, если нет такого ключа.

→ Ссылка