Понимание списка с несколькими условиями и переназначение значения - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть функция, которая имеет несколько условий (ровно 5), которые моделируют это утверждение:

for n, i in enumerate(EPS_List_EPSV):
        if i == 'Very Satisfied':
            EPS_List_EPSV[n] = 1
        elif i == 'Satisfied':
            EPS_List_EPSV[n] = 2
        elif i == 'Dissatisfied':
            EPS_List_EPSV[n] = 3
        else:
            EPS_List_EPSV[n] = 4

Мне было интересно, есть ли более питонический способ написания этого из-за абсурдной длины функциидолго.Я понимаю понимание списка при работе с одной переменной, но есть ли способ написать это, используя понимание списка?Правильное написание этого уклоняется от меня.

Ответы [ 3 ]

0 голосов
/ 22 февраля 2019

Использование dict:

d = {
    'Very Satisfied': 1,
    'Satisfied': 2,
    'Dissatisfied': 3    
}

EPS_List_EPSV = ['Very Satisfied', 'Something Else', 'Satisfied', 'Something Else', 'Dissatisfied'

for n, i in enumerate(EPS_List_EPSV):
    EPS_List_EPSV[n] = d.get(i, 4)

print(EPS_List_EPSV)
[1, 4, 2, 4, 3]

d.get должно вернуть 4, если задан какой-либо неопределенный ключ.

0 голосов
/ 22 февраля 2019

Использование словаря и понимание списка:

corr = {"Very Satisfied":1, "Satisfied":2, "Dissatisfied":3}
EPS_List_EPSV = [corr.get(el, 4) for el in EPS_List_EPSV]

Например:

EPS_List_EPSV = ["Very Satisfied", "Satisfied", "Satisfied", "Dissatisfied", "Other"]

с использованием приведенного выше кода становится: [1, 2, 2, 3, 4]

0 голосов
/ 22 февраля 2019

Если бы я был, я бы создал dict

dictio = {'Very Satisfied' : 1, 'Satisfied': 2, 'Dissatisfied' : 3, 'other' : 4}

Тогда ваш код должен выглядеть так:

for n, i in enumerate(EPS_List_EPSV):
    EPS_List_EPSV = dictio[i]

Редактировать: Крис ответ более точный, так как он не вызывает KeyError вcase ESP_List_EPSV содержит слово, которого нет в dict

...