Python列表嵌套字典随机调用follower_count值异常求助
问题分析与修复方案
核心问题点
- 随机数范围错误:原代码中
random.randint(0, length)会生成0到6(含6)的整数,但列表data只有6个元素,合法索引是0-5。当生成0时,number-1得到-1,Python会取列表最后一个元素;生成6时,number-1得到5(合法),这就导致随机索引对应的结果不符合预期,出现“粉丝数随机选取”的现象。 - 变量名冲突:原代码先定义了
number()函数,后续又将变量number赋值为随机数,覆盖了函数本身,后续无法再调用该函数,属于不良编码习惯。 - 越界访问:最后一行
print(data[11]['follower_count'])访问索引11,远超出列表的合法索引范围(0-5),会直接抛出IndexError异常。
修复后的代码
import random data = [ { 'name': 'Instagram', 'follower_count': 346, 'description': 'Social media platform', 'country': 'United States' }, { 'name': 'Cristiano Ronaldo', 'follower_count': 215, 'description': 'Footballer', 'country': 'Portugal' }, { 'name': 'Ariana Grande', 'follower_count': 183, 'description': 'Musician and actress', 'country': 'United States' }, { 'name': 'Dwayne Johnson', 'follower_count': 181, 'description': 'Actor and professional wrestler', 'country': 'United States' }, { 'name': 'Selena Gomez', 'follower_count': 174, 'description': 'Musician and actress', 'country': 'United States' }, { 'name': 'Kylie Jenner', 'follower_count': 172, 'description': 'Reality TV personality and Self-Made Billionaire', 'country': 'United States' } ] def comparison(followers_A, followers_B): return followers_A if followers_A > followers_B else followers_B def generate_random_index(): '''生成合法的列表随机索引''' return random.randint(0, len(data)-1) def get_follower_count(index): '''根据索引获取对应粉丝数''' return data[index]['follower_count'] length = len(data) print(f"{length} 是列表的长度") random_idx = generate_random_index() print(f"{random_idx} 是随机索引") follower_count = get_follower_count(random_idx) print(f"{follower_count} 是对应的粉丝数") # 如需测试特定元素,可使用合法索引,比如: # print(data[0]['follower_count'])
修复说明
- 修正随机数范围:直接生成0到
len(data)-1的整数,也就是列表的合法索引,无需再做减1操作,彻底避免负索引和越界问题。 - 语义化命名:将原函数
number()改名为generate_random_index(),follower()改名为get_follower_count(),同时变量名也更清晰,避免了函数与变量的命名冲突。 - 移除错误代码:删除了越界访问的代码,如需测试特定元素,可添加合法索引的打印语句。
内容的提问来源于stack exchange,提问作者Shehzad Ahmad
相关产品推荐
相关产品推荐

