2013-03-10 31 views
15

Trong python 3, tôi có một tuple và một mảng A như sauConvert to namedtuple

Row = namedtuple('Row', ['first', 'second', 'third']) 
A = ['1', '2', '3'] 

Làm thế nào để chèn mảng này vào tên tuple? Lưu ý rằng trong tình hình của tôi, tôi không thể trực tiếp làm điều này:

newRow = Row('1', '2', '3') 

Tôi đã thử phương pháp khác nhau

1. newRow = Row(Row(x) for x in A) 
2. newRow = Row() + data    # don't know if it is correct 

Trả lời

39

Bạn có thể làm Row(*A) mà sử dụng lập luận giải nén.

>>> from collections import namedtuple 
>>> Row = namedtuple('Row', ['first', 'second', 'third']) 
>>> A = ['1', '2', '3'] 
>>> Row(*A) 
Row(first='1', second='2', third='3') 

Lưu ý rằng nếu Linter của bạn không phàn nàn quá nhiều về việc sử dụng phương pháp đó bắt đầu với một dấu gạch dưới, namedtuple cung cấp một _make classmethod constructor thay thế.

>>> Row._make([1, 2, 3]) 

Đừng để tiền tố gạch đánh lừa bạn - đây là phần của API tài liệu cho lớp này và có thể được dựa vào để có mặt ở đó trong tất cả các triển khai python, vv ...

1

Lớp con namedtuple có một phương thức có tên '_make'. Chèn một mảng (Danh sách Python) vào một đối tượng có tên là Đối tượng dễ dàng sử dụng phương thức '_make':

>>> from collections import namedtuple 
>>> Row = namedtuple('Row', ['first', 'second', 'third']) 
>>> A = ['1', '2', '3'] 
>>> Row._make(A) 
Row(first='1', second='2', third='3') 

>>> c = Row._make(A) 
>>> c.first 
'1' 
Các vấn đề liên quan