何时以及为什么要使用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。