Python 如何在dict中正确存储值?
我有一个代码,它提供了AWS RDS的详细信息:Python 如何在dict中正确存储值?,python,dictionary,Python,Dictionary,我有一个代码,它提供了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 in
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\u name”是主值,“rds\u type”是子类。如何做到这一点?使用
你只是在循环中更新你的字典,所以你得到了最后一个值 也就是说,您要创建的结构是一组字典,这是不可能的,因为字典是不可散列的(意味着它们不能转换为集合的散列键或字典键) 您需要一个词典列表,要做到这一点,使用列表理解功能在列表中构建词典,一行就足够了:
return [{'rds_name':instance.id,'rds_type':instance.instance_class} for instance in conn.get_all_dbinstances()]
相当于(但快于):
旁白:永远不要尝试<代码>和<代码>除非:通过<代码>:你掩盖了所有可能发生的错误,包括未定义的变量等。。。让程序运行,并仅在需要时捕获异常,并且仅捕获所需的异常类型。您想要的数据结构根本不存在…
{'rds_name':u'syd01-jumper-upgrad-shared'{'rds_type':u'db.t2.medium'}
对于字典来说没有任何意义,键是唯一的,在每次迭代中都要重新编写键的值。因此,您只能得到最后的结果。您的程序正在返回词典词典。你必须制定一个方法来保存它。有关Python词典的更多信息,请参考基础教程@m_callens,哦,好的,我明白了,但是我该怎么做呢?哦,好的,你能打开列表让我更好地了解一下吗,我真的很新,你说的可哈希性是什么意思
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