的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) 

但是,我怎么写一个通用函数,我可以使用任何参数?

+0

'values.append(E .__的getAttribute __( “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)