如何将字符串值提取到对象字段中

时间:2015-01-23 01:07:37

标签: python

我有这本词典:

{"id":3,"name":"MySQL","description":"MySQL Database Server - Fedora 21 - medium","image":"","flavor":""}

我有这个对象:

class Record():
    id = None
    name = None
    description = None
    image = None
    flavor = None

如何将字典中的值分配给相应的类字段?

7 个答案:

答案 0 :(得分:3)

将dict对象作为 init 函数的参数:

class Record(object):
  def __init__(self,record_dict):
    try:
      self.id = record_dict['id']
      self.name = record_dict['name']
      self.description = record_dict['description']
      self.image = record_dict['image']
      self.flavor = record_dict['flavor']
    except KeyError:
      print 'KeyError'

  def get_name(self):
    return self.name

adict = {"id":3,"name":"MySQL","description":"MySQL Database Server - Fedora 21 - medium","image":"","flavor":""}

one_obj = Record(adict)

print one_obj
print one_obj.get_name()

输出:

<__main__.Record object at 0x022E4C90>
MySQL

适合我...

答案 1 :(得分:2)

你可能想要这样的东西:

class Record:
def __init__(self, myDict):
    self.id = myDict[“id”]
    self.name = myDict[“name”]
    self.description = myDict[“description”]
    self.image = myDict[“image”]
    self.flavor = myDict[“flavor”]

并称之为:

rec = Record(myDict)

请参阅here以了解类和实例变量之间的区别。

长话短说,类变量对于类的每个实例都有一个值,而实例变量值对每个实例都是唯一的。

类变量的定义如下:

class myClass:
    Classvar =  ‘something’

实例变量的定义如下:

class myClass:
    def __init__():
        Self.instanceVar = ‘something else’ 

答案 2 :(得分:2)

这已在这里得到解答: Convert Python dict to object?

我最喜欢的方法是这个:x.__dict__.update(d)

答案 3 :(得分:1)

您可以按照以下方式分配它们,假设您的词典名称为input

id = input['id']
name = input['name']
description = input['description']
image = input['image']
flavor = input['flavor']

答案 4 :(得分:1)

尝试使用此方法获取对象的属性:

r = Record()
attributes = [i for i in dir(r) if not i.startswith('_')]

基本上,有一堆背景属性包含一堆下划线。 dir方法获取所有属性,我们创建一个我们想要的列表。此时:

# attributes = ['count', 'description', 'flavor', 'id', 'image', 'index', 'name']

现在我们使用__setattr__根据my_dict

设置我们刚刚抓取的属性
for i in attributes:
    r.__setattr__(i, my_dict[i])

查看在线运行的代码here

答案 5 :(得分:0)

创建记录时,传入字典。然后将键映射到值。

答案 6 :(得分:0)

另一种简单方法,请参阅代码here

r = Record()

for k, v in my_dict.items():
    exec('r.' + k + '="' + str(v) + '"')