代码和上下文:
有关数据搜寻练习的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,否则用键值对更新字典。
为什么后者优于前者?
答案 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
分支的执行。