2015-05-30 16 views
5

Tôi đang sử dụng chức năng nàytuples Mở rộng trong phát danh sách hiểu

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

đầu ra của tôi mong muốn mà tôi muốn nên

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

Sản lượng chức năng trên là

[genexp, genexp, genexp] 

của nó biểu thức máy phát điện và tôi không thể mở rộng nó như tôi muốn

.210

Trả lời

7

định kiểu gen-exp để một tuple

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

Hầu như quên +1 bạn;) –

+0

Err. Bạn đang già đi! :( –

+1

Tôi vẫn có thể đá ass fella trẻ của bạn;) –

5

Các Parens đang tạo một tuple máy phát điện gọi biểu theo Bhargav's answer hoặc bạn có thể sử dụng operator.attrgetter với bản đồ:

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

Demo:

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

Bạn có thể xóa cuộc gọi danh sách cho python2.

+0

Typo 'fileds = [...]' thay đổi thành 'fields = [...' – Scott

+0

@Scott, yep chúc mừng. –

+0

Chỉ cần tự hỏi, là nó được chấp nhận nhiều hơn để chỉ chỉnh sửa câu trả lời của bạn (khi có một lỗi đánh máy rõ ràng như trong trường hợp này) hoặc để lại một bình luận? – Scott

Các vấn đề liên quan