擅长:python、mysql、java
<p>正如<a href="https://stackoverflow.com/a/16553551/1612701">other</a><a href="https://stackoverflow.com/a/16554551/1612701">answers</a>所提到的,试图将dict传递给orderedict或使用关键字参数并不能保持顺序。不过,传入元组有点难看,这是Python。它应该很漂亮。</p>
<p>您可以对类使用<code>__getitem__</code>,以便使用类似dict的语法创建OrderedDict“literals”:</p>
<pre><code>from collections import OrderedDict
class OD(object):
"""This class provides a nice way to create OrderedDict "literals"."""
def __getitem__(self, slices):
if not isinstance(slices, tuple):
slices = slices,
return OrderedDict((slice.start, slice.stop) for slice in slices)
# Create a single instance; we don't ever need to refer to the class.
OD = OD()
</code></pre>
<p>现在可以使用类似dict的语法创建OrderedDict:</p>
<pre><code>spam = OD['s': (1, 2),
'p': (3, 4),
'a': (5, 6),
'm': (7, 8)]
assert(''.join(spam.keys()) == 'spam')
</code></pre>
<p>这是因为在方括号内,Python创建<a href="https://docs.python.org/3/library/functions.html#slice" rel="nofollow noreferrer">slice</a>文本,如果您稍微斜视一下,这些文本看起来就像dict语法。</p>
<p><code>OD</code>类可以从错误检查中获益,但这演示了它如何工作。</p>