开发者

Treat value of string as .. an attribute name?

开发者 https://www.devze.com 2023-03-21 16:26 出处:网络
Say I have a dict: d = { \'eggs\': 4, \'cheese\': 6, \'coconuts\': 8, } Is is possible to loop over the dictionary, creating variables named after the keys, assigning them the corresponding value?

Say I have a dict:

d = {
    'eggs': 4,
    'cheese': 6,
    'coconuts': 8,
}

Is is possible to loop over the dictionary, creating variables named after the keys, assigning them the corresponding value?

eggs = 4
chee开发者_如何学运维se = 6
coconuts = 8

Or maybe inside an object?

self.eggs = 4
self.cheese = 6
self.coconuts = 8

Is this possible?


>>> d = {
...     'eggs': 4,
...     'cheese': 6,
...     'coconuts': 8,
... }
>>> globals().update(d)
>>> eggs
4
>>> cheese
6
>>> coconuts
8
>>> d
{'cheese': 6, 'eggs': 4, 'coconuts': 8}

But for classes, it is easier(safer), just use:

for item, value in d.items():
     setattr(some_object, item, value) #or self.setattr(item, value)


You could use Alex Martelli's Bunch class:

>>> class Bunch(object):
...     def __init__(self, **kwds):
...         self.__dict__.update(kwds)
...
>>> d = {
...     'eggs': 4,
...     'cheese': 6,
...     'coconuts': 8,
... }
>>> b = Bunch(**d)
>>> b.eggs
4


Use setattr:

d = {
    'eggs': 4,
    'cheese': 6,
    'coconuts': 8,
}

class Food: pass

food = Food()

for item in d.iteritems():
    setattr(food, *item)

print(food.eggs, food.cheese, food.coconuts)
0

精彩评论

暂无评论...
验证码 换一张
取 消