2017-04-15 136 views
5

如果我要用字典而不是else语句编写语句,那会是怎样呢?例如,说我有if/else语句与字典

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

如果我要重写这个使用字典,这将是

rank = {"Freshman":1, "Sophmore":2, "Junior":3, "Senior", ???} 

我会写什么号码为别的吗?

回答

5

使用.get方法使用默认值作为第二个参数:

rank = {1: 'Freshman', 2: 'Sophmore', 3: 'Junior'} 
rank.get(years, 'Senior') 
+1

是的,除了OP的'rank'字典有年份作为值,不是键 – vaultah

+0

@vaultah没关系。如果有必要,你可以切换像'rank = dict((y,x)for old_rank.iteritems()中的x,y)'' –

+0

* *为了使'rank.get'按预期工作,所以它确实很重要。 – vaultah

3

您可以使用dictObject.get(key, defaultValue)

那么,相当于你的函数是:

rank = {1: "Freshman", 2: "Sophmore", 3:"Junior"}.get(year, "Senior"); 

注意,字典的键/值对是相反的。

1

为了扩展已发布的内容,使用dict.get将不会引起KeyError, '高级',不在字典里。

你也可以做这样的事情,利用三元运算符检查给定年是否已经在rank的关键:

rank = {1: "Freshman", 2: "Sophomore", 3: "Junior"} 
year = 4 
year_rank = rank[year] if year in rank else "Senior" 

year_rank将是“高级”

我觉得dict.get虽然方法稍微好一些。