2013-03-10 8 views
15

w Pythonie 3, mam krotki i tablicę A jako następująceKonwersja do namedtuple

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

Jak mogę wstawić do tej tablicy o nazwie krotki? Zauważ, że w mojej sytuacji nie mogę tego zrobić bezpośrednio:

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

próbowałem różnych metod

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

Odpowiedz

39

Można to zrobić za pomocą argumentu, który Row(*A) rozpakowaniu.

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

Zauważ, że jeśli linter nie skarżą się zbytnio przy użyciu metod, które zaczynają się od podkreślenia, namedtuple zapewnia _make classmethod alternatywnego konstruktora.

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

Nie daj się oszukać prefiks podkreślenia - to jest część udokumentowanego API dla tej klasy i mogą być powołane tam być we wszystkich implementacjach Python, etc ...

1

Nazwana podklasa ma metodę o nazwie "_make". Wstawianie tablicy (listy w języku Python) do obiektu o nazwanej nazwie jest proste, za pomocą metody "_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'