2015-06-23 169 views
2

我有一個包含電子表格中的「名稱/範圍」的對象列表。在處理電子表格時,我需要更新與範圍關聯的值。
的類來保存這些信息看起來是這樣的:python迭代對象列表

class varName: 
    name = None 
    refersTo = None 
    refersToR1C1 = None 
    value = None 
    def __init__(self, name, refersTo, refersToR1C1, value): 
     self.name = name 
     self.refersTo = refersTo 
     self.refersToR1C1 = refersToR1C1 
     self.value = value 

我創建列表如下:

staticNames = {} 
wbNames = wb.Names 
for name in wbNames: 
    (nSheet, nAddr) = name.RefersTo.split("!") 
    print "Name: %s Refers to: %s Refers to R1C1: %s  Value: %s " %(name.Name , name.RefersTo, name.RefersToR1C1, wSheets(nSheet.replace('=', '') ).Range(nAddr).value) 
    ##print wSheets(nSheet.replace('=', '') ).Range(nAddr).value 
    staticNames[name.Name] = varName( name.Name , name.RefersTo, name.RefersToR1C1, wSheets(nSheet.replace('=', '')).Range(nAddr).value ) 

看起來工作得很好。我可以在調試中看到列表和包含的對象。當我回到基於處理電子表格來更新列表中的對象時,我迷路了。 我調用這個函數:

def updateStaticNames(ws, r, c, val_in, staticNames ): 
    for sName in staticNames: 
     if sName.refersToR1C1() == "=" + ws.Name +"!R" + str(r) + "C" + str(c)  : 
      sName.value = val_in   
    return None  

staticNames是指包含名稱/ Range對象名單。 我期待sName包含varName類型的對象。但是,它包含一個字符串。我究竟做錯了什麼?

+1

'爲SNAME在staticNames:'在** **鍵(這是一本字典,而不是一個列表),所以'sName'會遍歷無論'name.Name'是... – jonrsharpe

回答

1

for foo in some_dict遍歷字典的,而不是它的值。

d = {'a': 1, 'b': 2, 'c': 3} 
for dd in d: 
    print(dd) 
# gives a; b; c 

你可能想要做for foo in some_dict.values()

for dd in d.values(): 
    print(dd) 
# gives 1; 2; 3 
+0

@AnandSKumar哎呀,謝謝! –

+0

歡迎你:) –

+0

如果需要鍵和值,Python的方式是使用'iteritems'例如:'用於K,V在d.iteritems():d [k]的.refersToR1C1 = 「someValue中」' – Ivanhoe