在列表理解生成器中扩展元组
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 的列表调用。
我正在使用这个功能
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 的列表调用。