循环超过一个字典。 python中的key()

时间:2014-02-10 14:21:23

标签: python list dictionary

我这里有两种方法似乎不想互相交谈。我认为我使用字典的方式有点不对,我可能有点困惑:

def load(self, msg):

        loadState = {'foo1' { 'FirstObject':1, 'SecondObject':2 }, 'foo2' { 'FirstObject':3, 'SecondObject':4 }}

        foo_objects = loadState.keys()

        for name in foo_objects:
            if name == 'foo1':
                ValueTuple = loadState[foo_objects[0]]
            elif name == 'foo2':
                ValueTuple = loadState[foo_objects[1]]

            self.program.supervisor.setI2c( ValueTuple, foo = name ) #This is where I think it goes wrong

然后为了存储这些值,我将它们传递给之前正在使用的这个方法,把它放在上面的新方法上:

def setI2c( self, ValueTuple, foo=None ) :

        for name in foo :
                    object = self.objects[name]
                    for name in ValueTuple :
                        register = reg(name)
                        register.value = regNameValueTuple[name]

编辑:我出错的地方:

self.program.supervisor.setI2c( ValueTuple, foo = [name] )

1 个答案:

答案 0 :(得分:1)

您的load消息可以简化为:

def load(self, msg):    
    loadState = {'foo1' { 'FirstObject':1, 'SecondObject':2 }, 'foo2' { 'FirstObject':3, 'SecondObject':4 }}

    for name, value in foo_objects.iteritems():    
        self.program.supervisor.setI2c(value, foo=name)

此处,foo字符串,是loadState中的一个键。

然后,您在foo中循环setI2c,其中foo仍为字符串。这意味着你正在迭代各个角色:

>>> foo = 'foo1'
>>> for name in foo:
...     print name
...
f
o
o
1

根本不需要那个循环,你很可能想要这个:

def setI2c(self, value_dict, foo=None):
    object = self.objects[foo]
    for name in value_dict:
        register = reg(name)
        register.value = regNameValueTuple[name]

但您实际上并未在代码中的任何位置使用object,因此可以完全删除该行。

如果setI2c()始终希望foo成为名称列表,那么您应该在load中传递一个列表:

self.program.supervisor.setI2c(value, foo=[name])