问答详情
源自:3-1 namedtuple功能详解

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')
'''


提问者:黑鹰2 2018-04-28 19:55

个回答

  • ve0
    2019-08-27 14:50:19

    因为 字典虽然是iterable,但是在迭代的时候,其返回的是key值,而非value值,所以要想使用的是dict的value值,可以像上面说的那样,使用dict的values(),因为该方法得到的是dict的value值的可迭代对象

  • qq_木鱼_14
    2018-07-15 16:43:19

    https://img1.mukewang.com/5b4b08fa0001811a10950438.jpg

    iterable,next()取值



  • self_improve
    2018-04-30 13:26:43

    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部分作为参数传了进去。