Вернуть новый список ключей из словаря, если элементы в списке находятся в этом словаре, иначе вернуть элемент? - PullRequest
1 голос
/ 11 февраля 2020

Предположим, у меня есть список и словарь, как показано ниже:

list1 = ['moscow', 'warsaw', 'kobe', 'eyywyeyw', np.nan]
my_dict = {'russia':['vladivostok','moscow'],
           'poland': ['krakow','warsaw'],
           'japan':['tokyo', 'kobe']
          }

Как мне получить этот новый список:

new_list = ['russua', 'poland', 'japan', 'eyywyew', np.nan]

Я пытался:

for key, value in my_dict.items():
    for x in list1:
        if x is not np.nan:
            if x in value:
                new_list.append(key)
            else:
                new_list.append(x)

Ответы [ 4 ]

3 голосов
/ 11 февраля 2020

Вы можете попробовать это.

new_list=[]

for word in list1:
     for country,states in my_dict.items():
         if word in states:
             new_list.append(country)
             break
     else:
         new_list.append(word)

Блок else сразу после for / while выполняется только тогда, когда l oop НЕ завершается оператором break.


выход

['russia', 'poland', 'japan', 'eyywyeyw', nan]
2 голосов
/ 11 февраля 2020

Создайте словарь reverse и используйте его для создания нового списка.

import numpy as np
D = {a:k for k,v in my_dict.items() for a in v}
r = [D.get(item,item) for item in list1]

Предполагается, что все значения являются коллекциями.

1 голос
/ 11 февраля 2020

Если предположить, что названия городов не совпадают, я бы изменил их и использовал для этого списки.

flipped_dict = {v: k for k, vs in my_dict.items() for v in vs}
# {'vladivostok': 'russia',
#  'moscow': 'russia',
#  'krakow': 'poland',
#  'warsaw': 'poland',
#  'tokyo': 'japan',
#  'kobe': 'japan'}

list2 = [flipped_dict[i] if i in flipped_dict else i for i in list1]
print(list2)
# ['russia', 'poland', 'japan', 'eyywyeyw', nan]
1 голос
/ 11 февраля 2020
for city in list1:
        changed = False
        for key in my_dict.keys():
            if city in my_dict[key]:
                new_list.append(key)
                changed = True
                continue
        if not changed:
            new_list.append(city)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...