2015-06-21 58 views
1

我正在使用Python3和boto3包,并且正在运行describe_instances()来描述我的所有实例。然而,返回类型是一个字典,现在字典中有列表和其他字典。想要访问另一个字典内列表中的字典中的值

我想要做的例子是只返回“InstanceId”字符串或者如果我可以返回不会坏的整个“实例”列表。

ec2 = boto3.client(Make connection here) 
response = ec2.describe_instances() 
pp = pprint.PrettyPrinter(indent=2) 
pp.pprint(response) 

返回类型和响应代码可以在这里找到。 http://boto3.readthedocs.org/en/latest/reference/services/ec2.html#EC2.Client.describe_instances

回答

2

你可以得到所有InstanceIDs的名单像

import itertools 
instance_list = list(itertools.chain.from_iterable([[i.get("InstanceId") for i in r.get("Instances", [])] for r in response['Reservations']])) 
+0

的东西名单这工作正是我想它的工作。但是你能否解释一下这个语法。在这里完成Python的noob。 –

+0

'i.get(“key”,default)'如果字典中不存在该键,则返回一个默认值; '[f(i)for i in x]'是一个列表理解表达式,它通过遍历并评估f(i)中的每个元素来构建一个列表。因此,它或多或少等同于'the_list = [];对于我在x:the_list.append(f(i))',但没有将该列表分配给变量。 – celticminstrel