2015-10-29 39 views
-1

下面是一個簡單的類:在Python中,如果我知道其標識符,如何訪問對象屬性?

class Daz: 
    def __init__ (self, vName, vValue): 
     self.Name = vName 
     self.Value = vValue 

而且我可以創建類的實例,添加到字典這樣的:

dictOfDaz = [] 
dictOfDaz.append(Daz('Obj1',25)) 
dictOfDaz.append(Daz('Obj2',35)) 

所以,我現在想訪問一個的VVALUE財產我知道名字的例子。

在僞代碼:

Get vValue from instance of Daz where Daz.Name == 'Obj1' 

我不翻翻字典,想循環,因爲我知道我需要引用和不得不做的具體對象名稱

for d in dictOfDaz: 
    if d.Name == 'Obj1' or d.Name == 'Obj2': 
    do_this 

似乎效率不高對我來說。

更新: 已經有一個列表和字典,該解決方案之間的混淆(如指出湯姆和其他人指出)如下:

class Daz: 
    def __init__ (self, vName, vValue): 
     self.Name = vName 
     self.Value = vValue 

dictOfDaz = {} 

dictOfDaz['Obj1'] = Daz('Obj1',25) 
dictOfDaz['Obj2'] = Daz('Obj2',35) 
dictOfDaz['Obj3'] = Daz('Obj3',45) 
dictOfDaz['Obj4'] = Daz('Obj4',55) 

然後,這使我訪問的值通過:

print getattr(dictOfDaz['Obj1'], 'Value') 

這解決了我的問題,完美!

+0

你指的是一個字典列表,這是一個完全不同的東西。在你的例子中,你真正擁有的是listOfDaz,而不是dictOfDaz。 –

+0

如果你有一個字典'{name:Daz(name,value),...}',那麼效率會更高,但是對於一個列表來說,你現在擁有的是'O(n)'迭代。 – jonrsharpe

+0

你有什麼是鍵/值對列表。鍵/值對的列表不允許您有效地查找鍵的值。這就是爲什麼我們有'dict'代替。 – khelwood

回答

1

在你的例子中,你使用的是一個列表,而不是一個字典。如果你使用一個真正的字典,按名稱索引,那麼你可以通過名稱來查找您的對象:

dictOfDaz = {} 

daz = Daz('Obj1',25) 
dictOfDaz[daz.Name] = daz 

daz = Daz('Obj2',35) 
dictOfDaz[daz.Name] = daz 

現在,你可以參考dictOfDaz['Obj1']dictOfDaz['Obj2']

+0

訪問對象謝謝大家!我對Python很陌生,顯然在列表和字典之間混淆了!我無法弄清楚爲什麼我無法解決我的問題 - 現在變得非常有意義!我將編輯/更新問題以顯示修復程序... – Daz