Python3 TypeError求助:列表索引需为整数/切片而非字符串的问题解决
解决TypeError: list indices must be integers or slices, not str的问题
咱们先理清楚你遇到的问题:你错误地把列表server_list当成字典来使用字符串索引了,这就是触发TypeError的核心原因。
错误根源
你的server_list是由多个独立字典组成的列表,每个元素都是一个只有单个键的字典:
server_list = [ {'mydev': ['192.168.56.102', ...]}, {'mydev2': ['192.168.56.102', ...]} ]
列表只能用整数或切片来定位元素(比如server_list[0]取第一个字典),而你试图用字符串selected_env直接索引列表,自然会报错。
正确的列表推导式写法
我们需要遍历列表中的每个字典,检查字典是否包含目标键selected_env,如果包含就提取对应的值:
selected_env = 'mydev2' server_list = [ {'mydev': ['192.168.56.102', '192.168.56.102', '192.168.56.102']}, {'mydev2': ['192.168.56.102', '192.168.56.102', '192.168.56.102']} ] # 列表推导式:遍历每个字典,筛选出包含目标键的项并提取值 selected_servers = [env_dict[selected_env] for env_dict in server_list if selected_env in env_dict] # 如果确定只有一个匹配的环境,可以直接取出结果(避免嵌套列表) if selected_servers: target_servers = selected_servers[0] print(target_servers) # 输出: ['192.168.56.102', '192.168.56.102', '192.168.56.102']
更优的数据结构建议
如果可以调整数据结构,把server_list改成一个单一字典会更高效,后续取值无需遍历:
# 优化后的字典结构,直接用环境名作为键 server_dict = { 'mydev': ['192.168.56.102', '192.168.56.102', '192.168.56.102'], 'mydev2': ['192.168.56.102', '192.168.56.102', '192.168.56.102'] } # 直接用get方法取值,还能避免键不存在时报错 target_servers = server_dict.get(selected_env, [])
内容的提问来源于stack exchange,提问作者Raja G
相关产品推荐
相关产品推荐

