Python:从namedtuple列表中获取参数值列表

时间:2017-07-18 13:47:43

标签: python list namedtuple

我有一个namedtuples列表,如下例所示:

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]

我想在列表中的元素中列出给定参数的所有值,例如:for param'arg1'有list [1,0,1,1,2]和param'{ {1}}'要arg2

如果我事先知道参数,我可以使用for循环,如

list [2,2,0,2,3]

但是如何编写一个可用于任何参数的通用函数?

3 个答案:

答案 0 :(得分:5)

如果您想通过属性名称获取operator.attrgetter,可以使用operator.itemgetter,如果您想通过"位置"

访问它,则可以使用implicit function types
>>> 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]

答案 1 :(得分:3)

如果属性为字符串,您可以使用getattr来访问命名属性:

def func(param, lst):
   return [getattr(x, param) for x in lst]

print func('arg2', full_list)
# [2, 2, 0, 2, 3]

答案 2 :(得分:1)

在python中,有一个built-in function可以通过名称访问属性,它是调用getattr(还有一个类似的setter函数:setattr)。

它的签名是getattr(对象,名称)。

在你的情况下,我建议:

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)