2016-12-05 1 views
3

명명 된 튜플을 취하여 해당 튜플의 슈퍼 세트를 반환해야하는 함수를 작성했습니다. 현재Python : 동일한 속성/필드를 가진 명명 된 튜플 복사하기

Person(name='Bob', age=30, gender='male', x=0) 

내가이 일을하고있다 :

Person(name='Bob', age=30, gender='male') 

내가 다음과 같습니다 튜플을 반환하려면 :

예를 들어

는이 같은 명명 된 튜플을받을 수 있다면
tuple_fields = other_tuple[0]._fields 
tuple_fields = tuple_fields + ('x') 
new_tuple = namedtuple('new_tuple', tuple_fields) 

어느 것이 좋지만 다음과 같이 각 필드를 복사하고 싶지는 않습니다.

tuple = new_tuple(name=other_tuple.name, 
        age=other_tuple.age, 
        gender=other_tuple.gender, 
        x=0) 

FIRST 개체의 각 개체를 반복하고 그 개체를 복사 할 수 있기를 바랍니다. 실제 튜플은 30 개 필드입니다.

+0

가능한 중복 : //stackoverflow.com/questions/39098452/inherit-namedtuple-from-a-base-class-in-python) –

답변

6

당신은 그것을 짧게 만들 풀고 딕셔너리를 사용하려고 할 수 있습니다 예 : 포장을 해체에

tuple = new_tuple(x=0, **other_tuple._asdict()) 
+0

명명 된 튜플에'__dict__'가 있는지와 어떻게 작동하는지는 파이썬 버전간에 일관성이 없습니다. 나는 최신 3.5 개정판이 있다고 생각하지 않는다. 명명 된 튜플에 대해'__dict__ '를 갖는 것은 처음에는 좋지 않은 아이디어 였고, 그것은 좀더 심한 버그를 일으켰습니다. – user2357112

+1

명명 된 튜플의 사전 표현을 원하면 '_asdict' 메소드가 있습니다. – user2357112

+0

@ user2357112 감사합니다. 그에 대한 답을 업데이트하겠습니다. '__dict__'는 저에게 잘 돌아 갔지만 파이썬 3.4에 붙어 있습니다. – user3030010

1

더 나은 의견 : t = new_tuple(x=0, **other_tuple._asdict())

(HTTP [파이썬의 기본 클래스에서 namedtuple을 상속]의
관련 문제