擅长:python、mysql、java
<p>在<code>dict</code>s中,只有键必须是可散列的,而不是值。<code>namedtuple</code>没有键,所以哈希不是问题。</p>
<p>然而,它们有一个更严格的限制——它们的等价键“字段名”必须是字符串。</p>
<p>基本上,如果要创建类的一堆实例,比如:</p>
<pre><code>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)
</code></pre>
<p>在<code>__init__</code>中设置属性后,不要更改这些属性,</strong>您可以使用</p>
<pre><code>Container = namedtuple('Container', ['name', 'date', 'foo', 'bar'])
mycontainer = Container(name, date, foo, bar)
</code></pre>
<p>作为替代品。</p>
<p>当然,您可以创建一组<code>dict</code>,在其中每个键中使用相同的键,但是假设您只有有效的Python标识符作为键,并且不需要可变性</p>
<pre><code>mynamedtuple.fieldname
</code></pre>
<p>比</p>
<pre><code>mydict['fieldname']
</code></pre>
<p>以及</p>
<pre><code>mynamedtuple = MyNamedTuple(firstvalue, secondvalue)
</code></pre>
<p>比</p>
<pre><code>mydict = {'fieldname': firstvalue, 'secondfield': secondvalue}
</code></pre>
<p>最后,<code>namedtuple</code>s是有序的,不像常规的<code>dict</code>s,因此您可以按照定义字段的顺序获取项,不像<code>dict</code>。</p>