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

时间:2017-03-09 18:25:32

标签: 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 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'作为子类。该怎么做?

2 个答案:

答案 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

除此之外:从不tryexcept: pass:您正在屏蔽可能发生的所有错误,包括未定义的变量等等......让程序运行,并仅在需要时捕获异常,并仅捕获所需的异常类型。

答案 1 :(得分:0)

使用Class

class Rds:
    def __init__(self, name, type):
        self.Name = name
        self.Type = type