2016-09-06 44 views
2

中的一个的值返回列表元素有对象通过它的属性

l = [obj1, obj2, obj3] 

的列表中的每个obj是一个类的一个对象,并具有id属性。

如何从id列表中返回obj

P.S. id是独一无二的。并确保该列表包含所请求的对象id

+1

是'id's唯一的,确定其中一个objs是否有你想要的'id'? – depperm

+0

'myobj = next(x for x in l if x.id == myid)' – khelwood

+1

FWIW,所有的Python对象都有一个唯一的id,你可以用[内建的'id'函数] //docs.python.org/3.3/library/functions.html#id)。在CPython(又名标准Python)中,id是对象的内存地址。当然,这个ID可能不适合你的用例,因为每次程序运行时它都会改变。如果一个物体被摧毁,它的ID可以被回收。 –

回答

9

假设id是一个可哈希对象,就像一个字符串一样,您应该使用字典而不是列表。

l = [obj1, obj2, obj3] 
d = {o.id:o for o in l} 

然后,您可以用它们的键(例如, d['ID_39A']

+0

好的,我同意。我只是想,也许有一个简单的方法来做到这一点,我没有看到。字典在这里工作得更好。并且现在我没有看到在我的代码中使用它的任何缺点 – Dennis

+0

假设你确实想要越过列表,你可以做obj,=(obj for obj in l if obj.id =='whatever') '如果没有完全匹配的话,你也会得到'ValueError'的奖励。 –

+0

@NinjaPuppy是的,已经在我的代码中的某个时刻做到了这一点。我认为最初选择一个清单(而不是字典) - 是一个糟糕的选择:) – Dennis