Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在dict中正确存储值?_Python_Dictionary - Fatal编程技术网

Python 如何在dict中正确存储值?

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

我有一个代码,它提供了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\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