# 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') '''
因为 字典虽然是iterable,但是在迭代的时候,其返回的是key值,而非value值,所以要想使用的是dict的value值,可以像上面说的那样,使用dict的values(),因为该方法得到的是dict的value值的可迭代对象
iterable,next()取值
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部分作为参数传了进去。