2015-10-29 40 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