首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Namedtuple与字典

Namedtuple与字典
EN

Stack Overflow用户
提问于 2017-01-12 12:15:49
回答 2查看 7.7K关注 0票数 4

因此,我正在编写一个游戏,我需要一个数据类型,它可以存储从liststuplesstringsintegers等多个变量。我很纠结于使用dictionaries还是namedtuples

代码语言:javascript
复制
GameData = namedtuple('GameData', ['Stats', 'Inventory', 'Name', 'Health'])
current_game = GameData((20,10,55,3), ['Sword', 'Apple', 'Potion'], 'Arthur', 100)

GameData = {'Stats': (20,10,55,3), 'Inventory': ['Sword', 'Apple', 'Potion'], 'Name': 'Arthur', 'Health': 100}

您知道,这里最大的问题是所有这些值都可能发生变化,所以我需要一个可更改的数据类型,而不是namedtuple。从文档中看,namedtuples似乎有._replace(),那么这是否使它是可变的呢?

我还喜欢namedtuples有一个以name=value格式打印的__repr__方法。此外,将单独的__doc__字段分配给namedtuple中的每个值的功能也非常有用。dictionaries中有此功能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-12 12:19:29

只需使用class即可。字典的问题是,您不知道期望哪些键,IDE也无法为您自动完成。namedtuple的问题是它不是可变的。使用自定义类,您可以获得可读的属性、可变的对象和大量的灵活性。需要考虑的一些备选办法:

  • 从Python3.7开始,您可以使用dataclasses模块: 从数据类型导入dataclass @dataclass类GameData: stats: tuple库存: list name: str health: int
  • 在其他Python版本的情况下,您可以尝试吸引人包: 导入attr @att.s类GameData: stats = attr.ib() inventory = attr.ib() name = attr.ib() health = attr.ib()
票数 12
EN

Stack Overflow用户

发布于 2017-01-12 12:23:03

从文档中看,namedtuples似乎有._replace(),那么这是否使它是可变的呢?

No,如文档中所指定的,它将创建一个新的namedtuple,并替换该值。

如果希望数据是可变的,那么最好自己构造一个类。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41613015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档