下面是一個簡單的類:在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')
這解決了我的問題,完美!
你指的是一個字典列表,這是一個完全不同的東西。在你的例子中,你真正擁有的是listOfDaz,而不是dictOfDaz。 –
如果你有一個字典'{name:Daz(name,value),...}',那麼效率會更高,但是對於一個列表來說,你現在擁有的是'O(n)'迭代。 – jonrsharpe
你有什麼是鍵/值對列表。鍵/值對的列表不允許您有效地查找鍵的值。這就是爲什麼我們有'dict'代替。 – khelwood