在列表理解生成器中扩展元组

Expanding tuples in list comprehension generator

我正在使用这个功能

def convert_tuple(self, listobj, fields=['start', 'end', 'user']):
    return [(getattr(obj, field) for  field in fields)
            for obj in listobj] 

我想要的输出应该是

[('2am', '5am', 'john'), ('3am', '5am', 'john1'), ('3am', '5am', 'john2') ]

以上函数的输出为

[genexp, genexp, genexp] 

它的生成器表达式,我无法按我想要的方式扩展它

将 gen-exp 类型转换为 tuple

def convert_tuple(self, listobj, fields=['start', 'end', 'user']):
    return [tuple(getattr(obj, field) for  field in fields)
            for obj in listobj] 

parens 正在根据 创建生成器表达式调用元组,或者您可以将 operator.attrgetter 与映射一起使用:

from operator import attrgetter
def convert_tuple(listobj, fields=['start', 'end', 'user']):
    return list(map(attrgetter(*fields), listobj)) # python2 just map

演示:

class Foo():
    def __init__(self):
        self.x = 1
        self.y = 2
        self.z = 3


f = Foo()
f2 = Foo()
f2.x = 10


print(convert_tuple([f,f2]))

[(1, 2, 3), (10, 2, 3)]

您可以删除 python2 的列表调用。