我正在尝试获取实例id的列表,这些id是在python脚本中使用boto3api从describe_instances
调用获得的。对于那些不了解aws的人,如果需要的话,我可以在删除细节之后发布一个详细的代码。我正试图从这样的结构中访问一个项目
u'Reservations':[
{
u'Instances':[
{
u'InstanceId':'i-0000ffffdd'
},
{ }, ### each of these dict contain a id like above
{ },
{ },
{ }
]
},
{
u'Instances':[
{ },
{ },
{ },
{ },
{ }
]
},
{
u'Instances':[
{ }
]
}
]
我现在访问它就像
instanceLdict = []
instanceList = []
instances = []
for r in reservations:
instanceList.append(r['Instances'])
for ilist in instanceList:
for i in ilist:
instanceLdict.append(i)
for i in instanceLdict:
instances.append(i['InstanceId']) ####i need them in a list
print instances
仅供参考:我的reservations
变量包含u'Reservations':
的整个列表
我觉得这是低效的,因为我是一个python新手,我真的认为一定有更好的方法来做这件事,而不是多个for
和if
。有没有更好的办法?请指出在我的场景中可能有用的结构/方法等
实际上,您的解决方案并没有那么低效,只是您实际上不必创建所有顶级列表来最终保存实例id。您可以做的是嵌套循环并只保留您需要的:
是的,有一些方法可以用较短的代码来实现这一点,但是显式的要比隐式的好,并且坚持你能读到的最好的东西。Python非常擅长迭代,记住维护性第一,性能第二。而且,这一部分很难成为在所有API调用、DB查找等之后所做工作的瓶颈
但是如果你真的坚持要做一行花哨的话,去看看itertools助手,
chain.from_iterable()
就是你需要的:相关问题 更多 >
编程相关推荐