什么情况下应该使用namedtuple?
当我研究它时,它看起来像是一种使元组更像字典的方法。它们与字典相比如何?
只能将字典的相同哈希类型用于命名元组吗?
在dicts 中,只有键必须是可散列的,而不是值。namedtuples 没有键,所以哈希性不是问题。
dict
namedtuple
但是,它们有更严格的限制——它们的等效键“字段名称”必须是字符串。
基本上,如果您要创建一堆类的实例,例如:
class Container: def __init__(self, name, date, foo, bar): self.name = name self.date = date self.foo = foo self.bar = bar mycontainer = Container(name, date, foo, bar)
并且 在设置属性后不更改属性__init__,您可以改用
__init__
Container = namedtuple('Container', ['name', 'date', 'foo', 'bar']) mycontainer = Container(name, date, foo, bar)
作为替代品。
当然,您可以创建一堆dicts ,其中每个都使用相同的键,但假设您将只有有效的 Python 标识符作为键并且不需要可变性,
mynamedtuple.fieldname
比
mydict['fieldname']
和
mynamedtuple = MyNamedTuple(firstvalue, secondvalue)
mydict = {'fieldname': firstvalue, 'secondfield': secondvalue}
最后,namedtuples 是有序的,与常规dicts 不同,因此您按照定义字段的顺序获取项目,与 a 不同dict。