namedtuple的_make函數傳入dict,將key映射到字段,而不是value,為什么?
#?python3.6 from?collections?import?namedtuple User?=?namedtuple('User',?['name',?'age',?'height']) dict_user?=?{ ????'name':?'小張', ????'height':?1.75, ????'age'?:?18, } user?=?User._make(dict_user) print(user) ''' 結果為什么是把dict的key,而不是value賦值給了namedtuple的字段,結果如下: User(name='name',?age='height',?height='age') '''
2019-08-27
因為 字典雖然是iterable,但是在迭代的時候,其返回的是key值,而非value值,所以要想使用的是dict的value值,可以像上面說的那樣,使用dict的values(),因為該方法得到的是dict的value值的可迭代對象
2018-07-15
iterable,next()取值
2018-04-30
namedtuple對象的_make方法內容主要如下:
@classmethod
? ? def _make(cls, iterable, new=tuple.__new__, len=len):
????????result = new(cls, iterable)
其中第二個參數new的默認值為tuple對象的__new__方法,該方法是一個靜態方法,用于構建tuple實例且在__init__方法之前調用。
結合你所寫的代碼:
user?
=
?User._make(dict_user)
user來自于tuple的new方法通過傳入的dict生成,猜測(做了一些小實驗)該方法對傳入的dict調用了tuple函數,因此導致dict的key部分作為參數傳了進去。