在python中循环一个dict.key()

2024-06-16 08:50:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我这里有两种方法似乎不想互相交谈。我觉得我用字典的方式有点错误,我可能有点搞糊涂了:

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] )

Tags: 方法nameinselfforobjectsfoodef
1条回答
网友
1楼 · 发布于 2024-06-16 08:50:40

您的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中的一个键。你知道吗

然后在setI2c中的foo上循环,其中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])

相关问题 更多 >