如果在python3.6中有其他简化,有多个案例

时间:2017-05-24 19:43:38

标签: python if-statement

我有条件,用户我有[]。 P是一个文件,其中包含填充的所有变量l,m,n ....

然后

if a[1]  = '1':
   p.l = a[2]
elif a[1] = '2':
   p.m = a[2]
elif a[1] = '3':
   p.n = a[2]

这些条件一直持续到20-25岁

在python 3.6和python 2.7

中处理此问题的最佳方法是什么?

其他信息

您好, 很抱歉没有详细解释。 l,m,n等还有很多其他变量。但我必须在需要时定义它们。每个1,2,3等等可能有多达10-15,这取决于,但它们是固定的,因为这些数字不会改变,但l,m,n是我定义的,所以可以修改。

点是假设我得到一个像“你好,你好吗”和“你好你好”的字符串然后我把这个字符串放在变量中说'a'。 然后我将字符串拆分为[] = ['Hi','How','Are','You']和[] = ['Hello','How,'Are','you']。两次分开 现在我读了

if a[1] = 'HI':
      p.l = a[2]
elif a[1] = 'Hello':
     p.m = a[2]
elif a[1] = 'How':
    p.n = a[2]

所以这里取决于[1]值我需要将a [2]值存储在不同的变量中。 此外,[1]可能有20-25个不同的输入。 根据输入,我将把它存储在该特定变量中。

2 个答案:

答案 0 :(得分:2)

您可以使用字典来保存属性的名称以及setattr来设置属性。

lookup = {'1': 'l', '2': 'm', '3': 'n'}
key, value = a[1], a[2]
attribute = lookup[key]
setattr(p, attribute, value)

答案 1 :(得分:0)

对于这样的事情,我喜欢使用dict作为一种调度表。

您可以定义如下所示的地图:

set_map = {
   '1': "l",
   '2': "m",
   '3': "n"
}

然后将条件逻辑编码为字典查找:

setattr(p, set_map[a[1]], a[2])

setattr缺少设置属性'。它将对象,属性名称和值作为参数。

它的工作方式是首先解析a的值,然后解析set_map[a[1]]的值,这将是我们的一个字母'l''m' ,或'n')。然后,它使用值设置对象的属性。

举个例子,假设a[1] = '1'a[2] = 5,我们的字典查找会产生

set_map[a[1]] == set_map['1'] == 'l'

然后setattr将解析为

setattr(p, 'l', 5)

相当于输入

p.l = 5