namedtuple的_make函數(shù)傳入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) ''' 結(jié)果為什么是把dict的key,而不是value賦值給了namedtuple的字段,結(jié)果如下: User(name='name',?age='height',?height='age') '''
2019-08-27
因?yàn)?字典雖然是iterable,但是在迭代的時(shí)候,其返回的是key值,而非value值,所以要想使用的是dict的value值,可以像上面說的那樣,使用dict的values(),因?yàn)樵摲椒ǖ玫降氖莇ict的value值的可迭代對(duì)象
2018-07-15
iterable,next()取值
2018-04-30
namedtuple對(duì)象的_make方法內(nèi)容主要如下:
@classmethod
? ? def _make(cls, iterable, new=tuple.__new__, len=len):
????????result = new(cls, iterable)
其中第二個(gè)參數(shù)new的默認(rèn)值為tuple對(duì)象的__new__方法,該方法是一個(gè)靜態(tài)方法,用于構(gòu)建tuple實(shí)例且在__init__方法之前調(diào)用。
結(jié)合你所寫的代碼:
user?
=
?User._make(dict_user)
user來自于tuple的new方法通過傳入的dict生成,猜測(cè)(做了一些小實(shí)驗(yàn))該方法對(duì)傳入的dict調(diào)用了tuple函數(shù),因此導(dǎo)致dict的key部分作為參數(shù)傳了進(jìn)去。