具有多个条件的清单理解和价值重新分配

时间:2019-02-22 13:49:11

标签: python conditional list-comprehension

我有一个函数,该函数具有为该语句建模的几个条件(精确地为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

我想知道是否有更Python的方式编写此代码,因为该函数的长度太长了。我了解处理一个变量的列表理解,但是有没有办法使用列表理解来写这个呢?正确编写它在逃避我。

3 个答案:

答案 0 :(得分:2)

使用字典和列表理解:

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]

答案 1 :(得分:1)

使用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,如果给出了任何未定义的键。

答案 2 :(得分:0)

如果我要创建字典

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

然后您的代码应类似于:

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

编辑:克里斯的答案更为准确,因为如果ESP_List_EPSV包含不在字典中的单词,它不会引发KeyError