<p>首先,您没有对<code>dict</code>排序,而是对<code>dicts</code>的列表进行排序,这是非常不同的事情,尤其是Python中的<code>dict</code>没有定义顺序。在</p>
<p>您可以使用<a href="http://docs.python.org/library/functions.html#sorted" rel="nofollow">^{<cd4>}</a>和<a href="http://docs.python.org/library/operator.html" rel="nofollow">^{<cd5>}</a>轻松完成此操作:</p>
<pre><code>import operator
sorted_dicts = sorted(dicts, key=operator.itemgetter("diff"))
</code></pre>
<p><code>sorted()</code>内置函数接受<code>key</code>关键字参数,这是一个接受该值并给出另一个值进行排序的函数。这里我们使用<code>itemgetter()</code>从<code>dict</code>中获取所需的值来进行排序。在</p>
<h2>编辑:</h2>
<p>鉴于你的改变,有两个答案,因为你不清楚。如果需要值列表,只需从原始<code>dict</code>中提取它们:</p>
^{pr2}$
<p>这和拿<code>dict.values()</code>一样简单。当然,在python2.x下,您将希望使用<code>viewitems()</code>或{<cd13>}来获得良好的性能。在</p>
<p>如果你想对<code>dict</code>本身进行排序,那是另一回事,因为{<cd1>}本身就是无序的。在</p>
<p>首先,我想指出,<code>sorted(dict)</code>不会产生您建议的输出-dict迭代键,而不是默认值:</p>
<pre><code>users = {
'<User: user10>': {'alike': 1, 'diff': 46},
'<User: user11>': {'alike': 3, 'diff': 37},
'<User: user12>': {'alike': 0, 'diff': 50},
'<User: user13>': {'alike': 0, 'diff': 50},
'<User: user14>': {'alike': 0, 'diff': 50},
'<User: user15>': {'alike': 0, 'diff': 50},
'<User: user16>': {'alike': 0, 'diff': 50},
'<User: user17>': {'alike': 0, 'diff': 50},
'<User: user18>': {'alike': 0, 'diff': 50},
'<User: user19>': {'alike': 0, 'diff': 50},
'<User: user20>': {'alike': 0, 'diff': 50},
'<User: user2>': {'alike': 1, 'diff': 48},
'<User: user3>': {'alike': 2, 'diff': 42},
'<User: user4>': {'alike': 1, 'diff': 45},
'<User: user5>': {'alike': 2, 'diff': 43},
'<User: user6>': {'alike': 1, 'diff': 46},
'<User: user7>': {'alike': 1, 'diff': 46},
'<User: user8>': {'alike': 1, 'diff': 49},
'<User: user9>': {'alike': 0, 'diff': 50}
}
print(sorted(users))
</code></pre>
<p>给我们:</p>
<pre><code>['<User: user10>', '<User: user11>', '<User: user12>', '<User: user13>', '<User: user14>', '<User: user15>', '<User: user16>', '<User: user17>', '<User: user18>', '<User: user19>', '<User: user20>', '<User: user2>', '<User: user3>', '<User: user4>', '<User: user5>', '<User: user6>', '<User: user7>', '<User: user8>', '<User: user9>']
</code></pre>
<p>要生成已排序的<code>dict</code>,我们需要使用<a href="http://docs.python.org/library/collections.html#collections.OrderedDict" rel="nofollow">^{<cd18>}</a>:</p>
<pre><code>import collections
users = {
'<User: user10>': {'alike': 1, 'diff': 46},
'<User: user11>': {'alike': 3, 'diff': 37},
'<User: user12>': {'alike': 0, 'diff': 50},
'<User: user13>': {'alike': 0, 'diff': 50},
'<User: user14>': {'alike': 0, 'diff': 50},
'<User: user15>': {'alike': 0, 'diff': 50},
'<User: user16>': {'alike': 0, 'diff': 50},
'<User: user17>': {'alike': 0, 'diff': 50},
'<User: user18>': {'alike': 0, 'diff': 50},
'<User: user19>': {'alike': 0, 'diff': 50},
'<User: user20>': {'alike': 0, 'diff': 50},
'<User: user2>': {'alike': 1, 'diff': 48},
'<User: user3>': {'alike': 2, 'diff': 42},
'<User: user4>': {'alike': 1, 'diff': 45},
'<User: user5>': {'alike': 2, 'diff': 43},
'<User: user6>': {'alike': 1, 'diff': 46},
'<User: user7>': {'alike': 1, 'diff': 46},
'<User: user8>': {'alike': 1, 'diff': 49},
'<User: user9>': {'alike': 0, 'diff': 50}
}
print(collections.OrderedDict(sorted(users.items(), key=lambda x: x[1]["diff"])))
</code></pre>
<p>这给了我们:</p>
<pre><code>OrderedDict([('<User: user11>', {'diff': 37, 'alike': 3}), ('<User: user3>', {'diff': 42, 'alike': 2}), ('<User: user5>', {'diff': 43, 'alike': 2}), ('<User: user4>', {'diff': 45, 'alike': 1}), ('<User: user10>', {'diff': 46, 'alike': 1}), ('<User: user7>', {'diff': 46, 'alike': 1}), ('<User: user6>', {'diff': 46, 'alike': 1}), ('<User: user2>', {'diff': 48, 'alike': 1}), ('<User: user8>', {'diff': 49, 'alike': 1}), ('<User: user20>', {'diff': 50, 'alike': 0}), ('<User: user9>', {'diff': 50, 'alike': 0}), ('<User: user13>', {'diff': 50, 'alike': 0}), ('<User: user19>', {'diff': 50, 'alike': 0}), ('<User: user12>', {'diff': 50, 'alike': 0}), ('<User: user18>', {'diff': 50, 'alike': 0}), ('<User: user15>', {'diff': 50, 'alike': 0}), ('<User: user14>', {'diff': 50, 'alike': 0}), ('<User: user17>', {'diff': 50, 'alike': 0}), ('<User: user16>', {'diff': 50, 'alike': 0})])
</code></pre>
<p>注意,这里我们必须使用<code>lambda</code>语句作为键参数,因为<code>itemgetter()</code>不幸的是,它不能为我们获得多个级别的项。在</p>