You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 23:57:17