Замените слово в списке значением из словаря

#python #list #dictionary

Вопрос:

У меня есть список слов

 words = ['apple', 'peach', 'tomato']
 

И словарь

 translations = {'apple':' apfel', 'banana': 'banane', 'peach': 'pfirsich', 'orange': 'apfelsine'}
 

Мне нужно найти все слова, соответствующие ключам в словаре, заменить отсутствующие чем-то вроде <none> и поместить все это в новый список. То есть результат должен быть следующим:

 result = ['apfel', 'pfirsich', '<none>']
 

Список и словарь могут содержать более 10 000 элементов, если это важно.

Комментарии:

1. result = [translations.get(k, '<none>') for k in words] . Однако не используйте list и dict в качестве имен переменных, так как они будут затенять исходные встроенные модули с тем же именем.

2. что ты пробовал? поделитесь кодом, пожалуйста.

Ответ №1:

 words = ['apple', 'peach', 'tomato']

translations = {'apple':' apfel', 'banana': 'banane', 'peach': 'pfirsich', 'orange': 'apfelsine'}
 

Одним из способов сделать это может быть простое повторение с помощью метода .items (), который возвращает словарь как содержащий пары «ключ-значение» словаря, но в виде кортежей в списке.

Таким образом, вы можете перебирать и рассматривать его, например, как список:

 result = []
#k,v refers to our key-value pairs in our dictionary
for k,v in translations.items():
    # checks if key is in our list
    if k in words:
        # appends the value onto the list
        result.append(v)
    else:
        # appends alternative value
        result.append("<none>")
print(result)
 

Альтернативно и мое личное любимое, поскольку его можно использовать повторно,-это поместить его в определение..

 #lst is the list, dct is the dictionary
def multi_dict(lst, dct):
    result = []
    for k,v in dct.items():
        if k in words:
        # appends the value onto the list
            result.append(v)
        else:
        # appends alternative value
            result.append("<none>")
    return result

print(multi_dict(words, translations))
 

В любом случае это должно позволить вам перебрать 10 000 элементов или более.

Ответ №2:

попробуйте это:

 words = ['apple','peach','tomato']
translations = {'apple':'apfel','banana':'banane','peach':'pfirsich','orange':'apfelsine'}
    
result = [translations.get(i, '<none>') for i in words]
#['apfel', 'pfirsich', '<none>']