我在Python中有一个对象列表,每个对象都有一个id
属性。我想要得到这些ID的列表。
在C#中,我会写:
myObjects.Select(obj => obj.id);
我该如何在Python中实现这个功能?
我在Python中有一个对象列表,每个对象都有一个id
属性。我想要得到这些ID的列表。
在C#中,我会写:
myObjects.Select(obj => obj.id);
我该如何在Python中实现这个功能?
在这里查看关于"列表推导式"的部分:http://docs.python.org/tutorial/datastructures.html
如果你的起始列表叫做original_list
,而你的新列表称为id_list
,你可以像这样做:
id_list = [x.id for x in original_list]
[obj.id for obj in myObjects]
ids = (obj.id for obj in my_objects)
for id in ids:
do_something(id)
生成器表达式不支持随机访问,但可以按需获取每个id,因此避免了一次性构建列表。生成器表达式类似于xrange
,而列表推导式类似于range
。
还有一个需要注意的问题是,只要其中任何资源仍然处于打开状态,就可以访问生成器表达式。例如,以下代码将失败。
with open(filename) as f:
lines = (line for line in f)
# f is now closed
for line in lines:
print line
from asq.initiators import query
query(myObjects).select(lambda obj: obj.id)
from asq.selectors import a_
query(myObjects).select(a_("id"))
import operator
map(operator.attrgetter("id"), myObjects)