Замена значений ключом словаря в python - PullRequest
0 голосов
/ 19 февраля 2020

Итак, я создал словарь с каждой аббревиатурой штата, и ключи «Восток», «Центральный» и «Запад»

states_dict = {
    'West': ["CA","OR","WA","NV","ID","UT","AZ","MT","AK"],
    'Central': ["WY","CO","NM","ND","SD","NE","KS","OK","TX","MN","IA","MO","AR","LA","WI","IL","MS"],
    'East': ["MI","IN","KY","TN","AL","OH","GA","FL","SC","NC","VA","WV","DE","MD","NJ","PA","NY","CT","RI","MA","VT","NH","ME"] 
}

Я пытаюсь найти способ применить это к столбец кода и вернуть ключи словаря вместо этого в столбце. Например, если это ["CA", "FL"], я хочу, чтобы столбец был ["West", "East]. Я создал для l oop, где я добавил ключи в новый список, и это не было правильной длины, поэтому я начал использовать .replace, и он просто постоянно работает. Вот мой код.

for x in df['X20']:
    for i,j in states_dict.items():
        for v in j:
            if x==v:
                x20=df['X20'].replace(x,i)

            else:
                pass
x20

Ответы [ 3 ]

0 голосов
/ 19 февраля 2020

Вы можете сделать список, который ищет ключи, которые содержат поля поиска в своих значениях:

states_dict = {
    'West': ["CA","OR","WA","NV","ID","UT","AZ","MT","AK"],
    'Central': ["WY","CO","NM","ND","SD","NE","KS","OK","TX","MN","IA","MO","AR","LA","WI","IL","MS"],
    'East': ["MI","IN","KY","TN","AL","OH","GA","FL","SC","NC","VA","WV","DE","MD","NJ","PA","NY","CT","RI","MA","VT","NH","ME"] 
}

search = ["CA", "FL"] 
print([k for k, v in states_dict.items() if any(y in v for y in search)])
# ['West', 'East']
0 голосов
/ 19 февраля 2020

Сначала вместо циклического перемещения по всему словарю (using states_dict.items()) используйте клавишу, чтобы найти значение, так как зацикливание разрушает всю цель использования словаря.

, то есть вместо этого следует использовать

.replace(x,states_dic[<state code>])

замените переменную, которая обозначает код состояния

, но для этого вы должны переделать свой словарь как

{<state code>:<east/west/north/south>}

, например:

new_dict = {'CA':'west','OR':'west'...}

Вы можете сделать это, используя существующий словарь

new_dict = {}
for key, value in states_dict.items():
    for states in value:
         new_dict.update({states:key})
0 голосов
/ 19 февраля 2020

Не уверен, если вам нужно столбцы , но достаточно просто инвертировать ваши ключи / значения, чтобы легко извлечь данные, которые вы ищете:

keyed_by_region = {
    'West': ["CA","OR","WA","NV","ID","UT","AZ","MT","AK"],
    'Central': ["WY","CO","NM","ND","SD","NE","KS","OK","TX","MN","IA","MO","AR","LA","WI","IL","MS"],
    'East': ["MI","IN","KY","TN","AL","OH","GA","FL","SC","NC","VA","WV","DE","MD","NJ","PA","NY","CT","RI","MA","VT","NH","ME"] 
}
​
keyed_by_states = {}
for region, states in keyed_by_region.items():
    for state in states:
        keyed_by_states[state] = region

print('FL', keyed_by_states['FL'])
print('CA', keyed_by_states['CA'])

FL Восток

CA Запад

...