何时以及为什么要使用namedtuple而不是字典?
可能重复:
什么是Python中的“命名元组”?
什么情况下应该使用一个namedtuple?
当我研究它时,它看起来像使元组更像字典的一种方式。 他们如何比较字典?
只能使用相同的可散列types的字典用于namedtuples?
在dict
,只有键必须是可散列的,而不是值。 namedtuple
s没有密钥,所以hashability不是问题。
然而,他们有一个更严格的限制 – 他们的关键等价物,“字段名称”必须是string。
基本上,如果你要创build一堆类的实例,如:
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__
设置它们之后不改变属性,您可以改为使用
Container = namedtuple('Container', ['name', 'date', 'foo', 'bar']) mycontainer = Container(name, date, foo, bar)
作为替代品。
当然,你可以创build一堆dict
,在每个dict
中使用相同的键,但是假设你只有有效的Python标识符作为键并且不需要可变性,
mynamedtuple.fieldname
比…更漂亮
mydict['fieldname']
和
mynamedtuple = MyNamedTuple(firstvalue, secondvalue)
比…更漂亮
mydict = {'fieldname': firstvalue, 'secondfield': secondvalue}
最后, namedtuple
被命令,不像普通的dict
,所以你按照你定义字段的顺序获得项目,而不像dict
。
元组是不可改变的,无论是否被命名。 namedtuple
只是使访问更方便,通过使用名称而不是索引。 您只能为namedtuple
使用有效的标识符,它不执行任何散列 – 它会生成一个新types。