Однострочное решение для сравнения элементов списка - PullRequest
1 голос
/ 26 февраля 2020
region_dict = {'france':'West', 'germany':'Central', 'italy':'South', 'poland':'East', 'norway':'North'}

mylist = ['FRANCE','gERMANY', 'iTaLy', 'poland', 'Norway']

for item in mylist:
    if item.lower() in region_dict:
         region = region_dict[item.lower()]
         print(region)

Я пытаюсь сравнить значения списка с ключами dict и получить значения dict. Это работает, но есть ли способ сделать это в одной строке? На мой взгляд, нет никакой реальной причины, кроме того, что она выглядит лучше.

Я пытался сделать:

region = item for item in mylist if item.lower() in region_dict

, но это не сработало.

Ответы [ 4 ]

1 голос
/ 26 февраля 2020
region = [region_dict.get(item.lower()) for item in mylist if item.lower() in region_dict.keys()]
0 голосов
/ 26 февраля 2020

Если ключи region_dict всегда в нижнем регистре, это должно работать

region_dict = {'france':'West', 'germany':'Central', 'italy':'South', 'poland':'East', 'norway':'North'}

mylist = ['FRANCE','gERMANY', 'iTaLy', 'poland', 'Norway']

print(
[region_dict[a.lower()] for a in mylist if a.lower() in region_dict]
)
0 голосов
/ 26 февраля 2020

вот версия без понимания списка:

list(filter(None, map(region_dict.get, map(str.lower, mylist))))

вывод:

['West', 'Central', 'South', 'East', 'North']
0 голосов
/ 26 февраля 2020

Понимание списка написано в скобках:

region = [item for item in mylist if item.lower() in region_dict]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...