代码之家  ›  专栏  ›  技术社区  ›  Ziva

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

  •  3
  • Ziva  · 技术社区  · 7 年前

    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' arg2 list [2,2,0,2,3]

    如果我提前知道参数,我可以使用for循环,如

    values = []
    for e in full_list:
        values.append(e.arg1)
    

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

    3 回复  |  直到 7 年前
        1
  •  5
  •   MSeifert    7 年前

    你可以用 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]
    
        2
  •  3
  •   Moses Koledoye    7 年前

    getattr 要访问以字符串形式给定的命名属性,请执行以下操作:

    def func(param, lst):
       return [getattr(x, param) for x in lst]
    
    print func('arg2', full_list)
    # [2, 2, 0, 2, 3]
    
        3
  •  1
  •   Ori    7 年前

    built-in function 它允许通过属性的名称访问属性,这就是调用 getattr (还有一个类似的setter函数: setattr ).

    就你而言,我建议:

    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)