将if语句重写为字典

时间:2017-03-14 20:23:01

标签: python dictionary

所以我目前写了一个if / elif语句,但我似乎无法重写如何重写字典。

我现在有这个。

def determineRank(years):
    if years == 1:
        return "Freshman"
    elif years == 2:
        return "Sophmore"
    elif years == 3:
        return "Junior"
    else:
        return "Senior"

我目前有:

dYear = {"Freshman":1, "Sophmore":2, "Junior":3, "Senior":4}

但我不确定从哪里开始。

3 个答案:

答案 0 :(得分:1)

你的函数体看起来像这样:

rank = {
  1: "Freshman",
  2: "Sophomore",
  3: "Junior",
  4: "Senior"
}
return rank[years]

请注意,这不会检查输入是否有错误;如果你喂它0或5,你将得到一个访问错误。我会把检查作为学生的练习。 : - )

答案 1 :(得分:0)

你的字典是向后的,它应该是一个列表或元组。

def determineRank(years, ranks=(None, 'Freshman', 'Sophomore', 'Junior', 'Senior')):
    return ranks[years]

您可以通过将定义绑定为默认参数来避免在每个调用上创建新列表或元组:

None

您可以使用模运算来避免无关的def determineRank(years, ranks=('Freshman', 'Sophomore', 'Junior', 'Senior')): return ranks[years%len(ranks)]

'Senior'

请注意,您的原始代码会更优雅地处理错误输入(但仍然不正确),因为第4年和所有其他输入返回20,而上面的代码段有不同的不正确行为输入(例如'hello'contentPane)。

答案 2 :(得分:0)

您可以使用defaultdict

In [1]: from collections import defaultdict

In [2]: student = defaultdict(lambda: 'Senior')

In [3]: for k, v in ((1, 'Freshman'), (2, 'Sophmore'), (3, 'Junior')):
   ...:     student[k] = v
   ...:     

In [4]: student[1]
Out[4]: 'Freshman'

In [5]: student[2]
Out[5]: 'Sophmore'

In [6]: student[3]
Out[6]: 'Junior'

In [7]: student[4]
Out[7]: 'Senior'

In [8]: student[9]
Out[8]: 'Senior'