Skip to main content
 首页 » 编程设计

Python3 : TypeError: list indices must be integers or slices, 不是 str

2025年05月04日17jiqing9006

我的数据以 json 格式存储。通过使用 json:load() 我正在读取数据。

我正在尝试做的是基于传递的参数,我正在尝试从列表中提取 Key:Value 的特定部分并将它们存储到新列表中以供以后处理。

代码

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']}]          
for item in server_list : 
    host_list=[item for item in server_list[selected_env] if selected_env in server_list] 
 
print(host_list) 

我得到的错误是

TypeError:列表索引必须是整数或切片,而不是 str

注意:我已经实现了一种提取方式如下

for item in server_list: 
  for element in item : 
    if element == selected_env : 
       host_list=item[selected_env]   

即使它有效,我还是考虑对其进行优化,并阅读了一些关于列表提取的文章,并且有点陷入上述错误。

任何帮助,不胜感激。

请您参考如下方法:

如果您的输入数据必然是字典列表,我建议您先将其转换为单个字典,使用一个很好的字典理解,如下所示:

selected_env='mydev2' 
server_list=[{'mydev': ['192.168.56.101', '192.168.56.102', '192.168.56.103']}, {'mydev2': ['192.168.56.104', '192.168.56.105', '192.168.56.106']}]  
 
server_dict = {k:v for d in server_list for k,v in d.items()} 
host_list = server_dict[selected_env] 
 
print(host_list) 

注意:
d.items() 返回包含字典 d 的所有元组(键,值)的列表。
所以对于我的代码,在字典理解中:

  1. 在第一次迭代中,d 等于 {'mydev': ['192.168.56.101', '192.168.56.102', '192.168.56.103']} 和 d.items() 等于 [('mydev',['192.168.56.101', '192.168.56.102', '192.168.56.103'])]

  2. 在第二次迭代中,d 等于 {'mydev2': ['192.168.56.104', '192.168.56.105', '192.168.56.106']} 和 d.items() 等于 [('mydev2',['192.168.56.104', '192.168.56.105', '192.168.56.106'])]