我有一个带有AWS RDS详细信息的代码:
def instance_name():
mylist=['ap-southeast-2']
for region in mylist:
conn=boto.rds.connect_to_region(region)
try:
mydb={}
instances=conn.get_all_dbinstances()
for instance in instances:
#mydb.append(instance.id)
#print instance.id
#print instance.instance_class
mydb['rds_name']=instance.id
mydb['rds_type']=instance.instance_class
return mydb
except:
pass
if __name__ == "__main__":
x = instance_name()
print x
但这只打印列表中的最后一个RDS实例。
{'rds_name': u'syd01-jumper-upgrad-shared', 'rds_type': u'db.t2.medium'}
现在,如果你查看代码,我已经创建了一个字典&想要存储这样的rds:
{
{'rds_name': u'syd01-jumper-upgrad-shared'
{
'rds_type': u'db.t2.medium'
}
}
{
'rds_name': u'some_other_db'
{
'rds_type': u'db.t3.large'
}
}
}
.
.
我想要我的' rds_name'成为主要价值和' rds_type'作为子类。该怎么做?
答案 0 :(得分:1)
你只是在循环中更新你的字典,所以你得到了最后一个值。
也就是说,您要创建的结构是一组字典,这是不可能的,因为字典不是 hashable (意味着它们不能转换为集合的哈希键或字典键)
你想要一个字典列表,为此,使用列表理解在列表中构建字典就足够了:
return [{'rds_name':instance.id,'rds_type':instance.instance_class} for instance in conn.get_all_dbinstances()]
相当于(但快于):
mydb = []
for instance in conn.get_all_dbinstances():
mydb.append({'rds_name':instance.id,'rds_type':instance.instance_class})
return mydb
除此之外:从不做try
和except: pass
:您正在屏蔽可能发生的所有错误,包括未定义的变量等等......让程序运行,并仅在需要时捕获异常,并仅捕获所需的异常类型。
答案 1 :(得分:0)
使用Class。
class Rds:
def __init__(self, name, type):
self.Name = name
self.Type = type