如果if语句的顺序不同,则返回键错误的原因?

时间:2019-06-08 06:43:59

标签: python

代码和上下文:

有关数据搜寻练习的python课程简介。 Applestore.csv包含appstore中应用程序上的数据,任务是创建一个字典,其中包含年龄等级作为键,而频率作为值。

opened_file = open('AppleStore.csv')
from csv import reader
read_file = reader(opened_file)
apps_data = list(read_file)
content_ratings={}
for rows in apps_data[1:]:
    c_rating=rows[10]
    if c_rating in content_ratings==false:
        content_ratings.update({c_rating:1})
    else:
        content_ratings[c_rating]+=1
print(content_ratings)

我不明白为什么上面的代码会给我一个关键错误,而下面的代码却能正常工作:

opened_file = open('AppleStore.csv')
from csv import reader
read_file = reader(opened_file)
apps_data = list(read_file)
content_ratings={}
for rows in apps_data[1:]:
    c_ratings=rows[10]
    if c_ratings in content_ratings:
        content_ratings[c_ratings]+=1
    else: 
        content_ratings.update({c_ratings:1})
print(content_ratings)

在上述情况下,我相信我想说的是,如果c_rating不作为键存在,则更新字典以使键/值对成为其他键,只需将值加1。

在第二种情况下,我相信我要说的是如果键已经存在,则向该值添加1,否则用键值对更新字典。

为什么后者优于前者?

2 个答案:

答案 0 :(得分:3)

c_rating in content_ratings==false将永远是不正确的。这些运算符在Python中连锁:等效于c_rating in content_ratings and content_ratings==false

您可以写

if (c_rating in content_ratings) == False:

但是正确的书写方式是

if c_rating not in content_ratings:

更好的是,您可以将整个if / else替换为

content_rating[c_rating] = content_rating.get(c_rating, 0) + 1

答案 1 :(得分:2)

您的表达式被评估为if (c_rating in content_ratings) and (content_ratings==False)。由于第二个条件始终为False,因此整个表达式也始终为false,无论else是否在词典中,都会触发c_rating分支的执行。