您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

将字典转换为namedtuple或其他可哈希的dict-like的Python方法?

将字典转换为namedtuple或其他可哈希的dict-like的Python方法?

要创建子类,您可以直接传递字典的键:

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 @R_985_2419@ import @R_985_2419@
>>> b = @R_985_2419@(d, frozen_@R_985_2419@=True)
>>> hash(b)
7686694140185755210
>>> b.a
1
>>> b["a"]
1
>>> b["a"] = 2
@R_985_2419@Error: @R_985_2419@ is frozen

更高版本的Python中可能还会提供冻结的映射类型,请观看此PEP草案以接受还是拒绝:

python 2022/1/1 18:47:32 有341人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶