簡體   English   中英

遍歷一個字典。 python中的key()

[英]Looping over one dict. key() in 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] )

您的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中的鍵之一。

然后,在setI2csetI2c 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])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM