Python字典列表随机取值报TypeError索引类型错误排查
问题根因
触发报错的核心问题有两个:
- 你定义的
data_change函数接收了account入参,但函数内部完全没用到这个参数,反而直接用字符串索引访问全局变量data。而data是存储字典的列表,列表仅支持整数、切片类型的索引,不支持字符串作为索引,直接触发类型错误。 - 现有逻辑没有实现「从长列表随机选取条目」的需求,调用函数时传入的
data_a也没有提前赋值。
修复代码
直接用Python标准库random的内置方法实现随机选取,不需要手动计算、指定列表索引,列表长度不影响逻辑运行,修复后可直接运行:
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' } # 后续可直接往列表追加字典条目,无需修改其他业务逻辑 ] def data_change(account): # 从传入的单条字典参数中取值,不要直接访问全量列表 data_name = account["name"] data_desc = account["description"] data_country = account["country"] return f"{data_name}, is a {data_desc}, from {data_country}" # 随机抽取1个列表元素作为选项A data_a = random.choice(data) print(f"option A : {data_change(data_a)}")
补充说明
random.choice(序列对象)会直接从传入的非空序列中随机返回一个元素,不需要手动生成索引,适配任意长度的列表。- 如果需要抽取多个不重复的随机条目,可以使用
random.sample(data, 抽取数量),比如抽两个不重复的条目做对比,直接写a, b = random.sample(data, 2)即可。 - 编写单条数据处理函数时,注意区分「全量数据集」和「传入函数的单条数据对象」,不要在函数内部直接操作全局全量数据,避免出现这类类型不匹配的错误。
内容的提问来源于stack exchange,提问作者Anas Khan
相关产品推荐
相关产品推荐

