要创建子类,您可以直接传递字典的键:
MyTuple = namedtuple('MyTuple', d)现在要根据此字典或任何其他具有匹配键的字典创建元组实例:
my_tuple = MyTuple(**d)
当心: namedtuple 仅 比较 值 (有序)。它们旨在替代常规元组,并具有命名属性访问作为附加功能。
进行相等比较时,将不考虑字段名称
。它可能不是您想要的,也不是您期望的
namedtuple那种!这不同于
dict相等性比较,后者不但考虑了键而且还比较了不可知顺序。
对于实际上并不需要类型是 tuple子类的
读者,首先使用namedtuple可能没有多大意义。如果只想在字段上使用属性访问语法,那么创建名称空间对象将变得更加简单:
>>> from types import SimpleNamespace>>> SimpleNamespace(**d)namespace(a=1, b=2, c=3, d=4)
我想将字典转换为namedtuple的原因是,它变得可散列,但仍然像字典一样仍然可用
对于像食谱这样的可散列的“ attrdict”,请检查一个冻结的框:
>>> from box import Box>>> b = Box(d, frozen_box=True)>>> hash(b)7686694140185755210>>> b.a1>>> b["a"]1>>> b["a"] = 2BoxError: Box is frozen
更高版本的Python中可能还会提供冻结的映射类型,请观看此PEP草案以接受还是拒绝:
PEP 603-将冻结地图类型添加到集合中



