<p>你有几种选择。在</p>
<p>您可以使用列表理解并打印:</p>
<pre><code>>>> od
OrderedDict([('one', 1), ('two', 2), ('three', 3)])
>>> [(k,v) for k,v in od.items()]
[('one', 1), ('two', 2), ('three', 3)]
</code></pre>
<p>或者,知道顺序可能会改变,如果需要输出,可以直接转换为dict:</p>
^{pr2}$
<p>(在python3.6中,一个常规的<code>dict</code><a href="https://stackoverflow.com/questions/39980323/dictionaries-are-ordered-in-python-3-6">does maintain order</a>。使用python3.6,顺序不会改变。未来很可能会出现这种情况,但目前还不能保证。)</p>
<p>最后,您可以将<code>OrderDict</code>子类化,并将<code>__str__</code>方法替换为所需的格式:</p>
<pre><code>class Mydict(OrderedDict):
def __str__(self):
return ''.join([str((k, v)) for k,v in self.items()])
>>> md=Mydict([('one', 1), ('two', 2), ('three', 3)])
>>> md # repr
Mydict([('one', 1), ('two', 2), ('three', 3)])
>>> print(md)
('one', '1')('two', '2')('three', '3')
</code></pre>
<p>(如果希望repr的输出不同,请更改<code>__repr__</code>方法…)</p>
<hr/>
<p>最后一点:</p>
<p>有了这个:</p>
<pre><code>def returnAllStats(ints):
choices = ["Yes","No"]
dictInfo = {"Calories":ints[2], "Servings per Container":ints[0], "Amount per Serving":ints[1], "Total Fat":(ints[3]/100)*ints[2], "Saturated Fat":(ints[4]/100)*(ints[3]/100)*ints[2], "Cholesterol":ints[5], "Fiber":ints[6], "Sugar":ints[7], "Protein":ints[8], "Sodium":ints[9], "USA":choices[ints[10]], "Caffeine":ints[11]}
dictInfo = collections.OrderedDict(dictInfo)
return dictInfo
</code></pre>
<p>实际上,您得到的是一个无序的dict结果,因为您是从一个无序的dict文本创建OrderedDict。在</p>
<p>你应该改为:</p>
<pre><code>def returnAllStats(ints):
choices = ["Yes","No"]
return collections.OrderedDict([("Calories",ints[2]), ("Servings per Container",ints[0]), ("Amount per Serving",ints[1]), ("Total Fat",(ints[3]/100)*ints[2]), ("Saturated Fat",(ints[4]/100)*(ints[3]/100)*ints[2]), ("Cholesterol",ints[5]), ("Fiber",ints[6]), ("Sugar",ints[7]), ("Protein",ints[8]), ("Sodium",ints[9]), ("USA",choices[ints[10]]), ("Caffeine",ints[11])]}
return dictInfo
</code></pre>