Dataquest Python字典更新逻辑疑问:为何用content_ratings[bilal]?
字典频次统计中
content_ratings[bilal]写法的核心逻辑解释 整体设计思路拆解
这段代码的核心目标是统计每个内容评级的出现次数,选择字典作为存储结构,是因为字典天生适配「标签-计数值」的映射关系:我们把每个评级字符串作为字典的键,把对应评级的出现总次数作为键关联的值,完全匹配统计需求。
循环过程中,变量bilal会依次拿到列表ratings里的每一个评级字符串,所有字典操作都是围绕「更新当前这个评级对应的计数值」展开的。
你疑问的红线部分的操作逻辑
content_ratings[bilal]的写法本质是对字典两种典型操作的组合,对应两种完全不同的场景:
- 场景1:第一次遇到某类评级
当if bilal in content_ratings判断为假时,执行的content_ratings[bilal] = 1,是在字典中新增一个键:键的内容就是当前循环拿到的评级字符串,关联的初始值设为1,代表这是我们第一次统计到这个评级的出现。 - 场景2:之前已经遇到过某类评级
当if bilal in content_ratings判断为真时,执行的content_ratings[bilal] += 1,是找到字典里已存在的这个键,把它关联的计数值在原有基础上加1,代表我们又统计到一次这个评级,需要更新累计计数。
这种分场景的写法是为了适配Python字典的基础访问规则:如果不做存在性判断,直接对字典中不存在的键做加法运算,会直接触发
KeyError报错。提前判断键是否存在,先给新键设置合理初始值、再对已有键做累加,就能完全规避这类异常。
实际执行流程示例
拿初始空字典一步步走流程就会更清晰:
- 初始状态:
content_ratings = {} - 第一次循环拿到
bilal = "4+":判断发现字典里没有这个键,新增键值对"4+": 1,字典变为{"4+":1} - 第二次循环还是拿到
bilal = "4+":判断发现键已存在,将对应值加1变为2,字典变为{"4+":2} - 第三次循环拿到
bilal = "4+":键已存在,值加1变为3,字典变为{"4+":3} - 第四次循环拿到
bilal = "9+":字典无此键,新增键值对"9+":1,字典变为{"4+":3, "9+":1}
…… 后续循环持续按照这个逻辑更新,最终得到的统计结果就是{'4+': 3, '9+': 1, '12+': 2, '17+': 2},和代码运行结果完全一致。
内容的提问来源于stack exchange,提问作者mirrat rashid
相关产品推荐
相关产品推荐

