[英]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
中的鍵之一。
然后,在setI2c
中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])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.