Search code examples
pythoniterable-unpacking

Python update object from dictionary


Is there a built-in function/operator I could use to unpack values from a dictionary and assign it into instance variables?

This is what I intend to do:

c = MyClass()
c.foo = 123
c.bar = 123

# c.foo == 123 and c.bar == 123


d = {'bar': 456}
c.update(d)

# c.foo == 123 and c.bar == 456

Something akin to dictionary update() which load values from another dictionary but for plain object/class instance?


Solution

  • there is also another way of doing it by looping through the items in d. this doesn't have the same assuption that they will get stored in c.__dict__ which isn't always true.

    d = {'bar': 456}
    for key,value in d.items():
        setattr(c,key,value)
    

    or you could write a update method as part of MyClass so that c.update(d) works like you expected it to.

    def update(self,newdata):
        for key,value in newdata.items():
            setattr(self,key,value)
    

    check out the help for setattr

    setattr(...)
        setattr(object, name, value)
        Set a named attribute on an object; setattr(x, 'y', v) is equivalent to
        ''x.y = v''.