下面是一个简单的类:在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