的Python:取参数的值的列表从namedtuple
问题描述:
的名单我有namedtuples
列表,如下面的例子:的Python:取参数的值的列表从namedtuple
from collections import namedtuple
Example = namedtuple('Example', ['arg1', 'arg2', 'arg3'])
e1 = Example(1,2,3)
e2 = Example(0,2,3)
e3 = Example(1,0,0)
e4 = Example(1,2,3)
e5 = Example(2,3,5)
full_list = [e1, e2, e3, e4, e5]
我想借此给定参数的所有值的列表在列表中的元素,从而例如之中:PARAM的“arg1
”有list [1,0,1,1,2]
和PARAM“arg2
”有list [2,2,0,2,3]
如果我事先知道参数我把它用一个for循环可以, as
values = []
for e in full_list:
values.append(e.arg1)
但是,我怎么写一个通用函数,我可以使用任何参数?
答
,如果你想通过“位置”来访问它,您可以使用operator.attrgetter
如果要通过属性名称或operator.itemgetter
得到它:
>>> import operator
>>> list(map(operator.attrgetter('arg1'), full_list))
[1, 0, 1, 1, 2]
>>> list(map(operator.itemgetter(1), full_list))
[2, 2, 0, 2, 3]
答
您可以使用getattr
访问指定属性给出的属性作为一个字符串:
def func(param, lst):
return [getattr(x, param) for x in lst]
print func('arg2', full_list)
# [2, 2, 0, 2, 3]
答
在Python中,有一个built-in function
,使通过他们的名字属性的访问,这是呼叫getattr
(也有一个类似的setter函数:setattr
)。
它的签名是getattr(object,name)。
在你的情况,我的建议是:
attribute_list = ['arg1', 'arg2', 'arg3']
Example = namedtuple('Example', attribute_list)
e1 = Example(1,2,3)
e2 = Example(0,2,3)
e3 = Example(1,0,0)
e4 = Example(1,2,3)
e5 = Example(2,3,5)
full_list = [e1, e2, e3, e4, e5]
values = []
for e in full_list:
for attr in attribute_list:
values.append(attr)
'values.append(E .__的getAttribute __( “ARG1”))' –