<h3>Python使用稳定排序</h3>
<p>更通用的解决方案依赖于排序在Python中是稳定的这一事实。这意味着,如果两个项目排序相同,那么它们将保留其原始顺序</p>
<p>要获得所需的内容,请按第二个值进行反向排序。使用<code>my_dict.items()</code>获取(键,值)元组<code>t[1][1]</code>是第二个值</p>
<pre><code>items = sorted(my_dict.items(), key=lambda t:t[1][1], reverse=True)
</code></pre>
<p>然后按第一个值排序</p>
<pre><code>items.sort(key=lambda t:t[1][0])
</code></pre>
<p>在当前版本的Python中,DICT以键插入顺序维护项。因此,您可以通过以下方式创建已排序的dict:</p>
<pre><code>my_sorted_dict = dict(items)
</code></pre>
<h3>使用运算符.itemgetter()</h3>
<p>我看不到在嵌套数据结构上使用itemgetter的方法,例如我的dict.items()提供的(键[value1,value2])。因此,要使用<code>operator.itemgetter()</code>,需要将结构展平</p>
<pre><code>import operator
items = [(k, *v) for k,v in my_dict.items()]
</code></pre>
<p>这将它转换为一个元素元组,如:(k,value1,value2)</p>
<p>现在像以前一样对列表进行排序;第二个元素,然后是第一个元素<code>operator.itemgetter(n)</code>创建并返回一个函数,该函数接受一个对象并调用该对象上的<code>__getitem__(n)</code>。因此,这些行对项中的每个项执行按项[2]键控的反向排序,然后执行按项[1]键控的排序</p>
<pre><code>items.sort(key=operator.itemgetter(2), reverse=True)
items.sort(key=operator.itemgetter(1))
</code></pre>
<p>然后,听写理解构建排序的听写:</p>
<pre><code>my_sorted_dict = {k:[v1,v2] for k,v1,v2 in items}
</code></pre>
<p>我的字典</p>