回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一本字典,其格式如下:</p>
<pre><code>PairDict= {(19, 6): 13, (2, 29): 10, (38, 8): 20, (38, 5): 5}
</code></pre>
<p>键是一个包含两个元素的元组,值表示循环数。在</p>
<p>我需要根据元组第一个元素的给定排序顺序将字典重新排序到一个列表中,例如</p>
^{pr2}$
<p>其中,上面SortOrder中tuple的第一个元素表示PairDict中tuple键的第一个元素。SortOrder中元组的第二个元素表示PairDict中第一个元素的循环数之和</p>
<p>如果PairDict有多个元组具有相同的第一个元素,那么它的排序顺序可以是。
38需要先排序,在PictDict中有两个以38开头的元组,即<code>(38, 8)</code>和{<cd2>}。它的顺序可以是<code>[(38, 8): 20, (38, 5): 5]</code>或<code>[(38, 5): 5, (38, 8): 20]</code>。在</p>
<p>基于SortOrder的排序PairDict的预期输出可以是</p>
<pre><code>SortedPairDict= [((38, 8), 20), ((38, 5), 5), ((19, 6), 13), ((2, 29), 10)],
</code></pre>
<p>或者</p>
<pre><code>SortedPairDict= [((38, 5), 5), ((38, 8), 20), ((19, 6), 13), ((2, 29), 10)],
</code></pre>
<p>试着搜索,我能找到的最接近的例子是</p>
<p>参考:<a href="https://stackoverflow.com/questions/3301406/reordering-list-of-dicts-arbitrarily-in-python">reordering list of dicts arbitrarily in python</a></p>
<p>但在实现以该示例为键的代码时遇到的问题是元组。在</p>
<p>你能告诉我,如果有任何例子,我可以阅读这个或指导我如何是最好的方式来处理这个问题。在</p>
<p>感谢你的帮助。圣诞快乐:-)</p>
<p>谢谢。在</p>
<p><strong>更新:timeit Analysis Amber和Ashwini的解决方案</strong></p>
<pre><code>PairDict= {(19, 8): 13, (2, 29): 10, (38, 8): 20, (2, 18): 10, (43, 8): 20, (5, 13): 15, (6, 21): 9, (7, 25): 11, (8, 19): 15, (44, 4): 20, (0, 10): 9, (0, 36): 9, (21, 6): 19, (30, 4): 17, (24, 0): 11, (3, 14): 21, (6, 12): 9, (7, 20): 11, (20, 7): 10, (5, 23): 15, (11, 5): 15, (37, 6): 13, (34, 8): 20, (18, 2): 10, (0, 24): 9, (12, 6): 13, (8, 38): 15, (39, 5): 18, (42, 5): 17, (26, 7): 22, (10, 0): 9, (31, 0): 14, (3, 27): 21, (6, 37): 9, (36, 0): 17, (0, 33): 9, (41, 0): 18, (5, 39): 15, (5, 42): 15, (6, 40): 9, (5, 11): 15, (9, 3): 21, (25, 7): 13, (7, 28): 11, (3, 9): 21, (29, 2): 4, (32, 4): 22, (0, 41): 9, (40, 6): 10, (28, 7): 20, (6, 15): 9, (17, 4): 23, (23, 5): 18, (16, 5): 23, (8, 34): 15, (5, 16): 15, (8, 22): 15, (8, 43): 15, (4, 17): 19, (13, 5): 23, (4, 30): 19, (7, 26): 11, (15, 6): 13, (4, 44): 19, (22, 8): 18, (0, 31): 9, (35, 5): 23, (14, 3): 20, (33, 0): 12, (5, 35): 15, (27, 3): 16, (4, 32): 19}
SortOrder= [(5, 105), (4, 76), (8, 75), (3, 63), (0, 54), (6, 45), (7, 44), (13, 23), (16, 23), (17, 23), (35, 23), (26, 22), (32, 22), (9, 21), (2, 20), (14, 20), (28, 20), (34, 20), (38, 20), (43, 20), (44, 20), (21, 19), (22, 18), (23, 18), (39, 18), (41, 18), (30, 17), (36, 17), (42, 17), (27, 16), (11, 15), (31, 14), (12, 13), (15, 13), (19, 13), (25, 13), (37, 13), (33, 12), (24, 11), (18, 10), (20, 10), (40, 10), (10, 9), (29, 4)]
</code></pre>
<p>在[5]:%timeit琥珀色()
10000圈,最好每圈3:71.1 us</p>
<p>在[6]:%timeit ashwc()
1000圈,最好每圈3:753 us</p>