我的数据以 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: list indices must be integers or slices, not str
注意:我已经实现了一种提取方式,如下所示
for item in server_list:
for element in item :
if element == selected_env :
host_list=item[selected_env]
即使它有效,我还是想对其进行优化,并阅读了一些有关列表提取的文章,并且遇到了上述错误。
任何帮助,不胜感激。
原文由 Raja G 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您的输入数据必然是字典列表,我建议您先将其转换为单个字典,使用很好的字典理解,如下所示:
笔记:
d.items()
返回包含字典所有元组(键,值)的列表d
。所以对于我的代码,在字典理解中:
On 1st iteration,
d
equals{'mydev': ['192.168.56.101', '192.168.56.102', '192.168.56.103']}
andd.items()
equals[('mydev',['192.168.56.101', '192.168.56.102', '192.168.56.103'])]
在第二次迭代中,
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'])]