遍历字典,该字典的值是整数列表,并对其重新排序

时间:2018-11-07 02:24:40

标签: algorithm sorting python-3.6

我有这个特定的数据集:

{
"Player 1": [0, 1, 3, 5, 7, 0]
"Player 2": [3, 2, 4, 7, 6, 1]
"Player 3": [1, 3, 5, 4, 5, 1]
}

,并且需要从低到高的输出(元素0已重新排序列表):

{
"Player 1": [0, 1, 3, 5, 7, 0]
"Player 3": [1, 3, 5, 4, 5, 1]
"Player 2": [3, 2, 4, 7, 6, 1]
}

或基于从高到低的此输出(元素0对列表进行了重新排序):

{
"Player 2": [3, 2, 4, 7, 6, 1]
"Player 3": [1, 3, 5, 4, 5, 1]
"Player 1": [0, 1, 3, 5, 7, 0]
}

此处的输出显示了键/值的重新排序,因为每个列表中元素0中的值已按从低到高的顺序排序。我一直在考虑如何执行此操作,尽管我当前的数据模型不需要为每个“条目”提供键/值对,但这是最有意义的。

我不太确定如何尽可能高效地执行此操作,例如仅抓取元素0,创建临时列表,重新排序临时列表并将dict条目重新映射为该顺序。

或者,在列表中搜索并按从最高到最低,从最低到最高的顺序重新排序,并在每个元素变为最低可用或最高可用状态时弹出每个元素,然后从顶部开始。

最有效的方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以使用sorted

x = {"Player 1": [0, 1, 3, 5, 7, 0],
     "Player 2": [3, 2, 4, 7, 6, 1],
     "Player 3": [1, 3, 5, 4, 5, 1]}


output = dict(sorted(x.items(), key = lambda x: x[1][0]))
output_reverse = dict(sorted(x.items(), key = lambda x: x[1][0], reverse=True))

print(output)
print(output_reverse)


# output,

{'Player 1': [0, 1, 3, 5, 7, 0], 'Player 3': [1, 3, 5, 4, 5, 1], 'Player 2': [3, 2, 4, 7, 6, 1]}
{'Player 2': [3, 2, 4, 7, 6, 1], 'Player 3': [1, 3, 5, 4, 5, 1], 'Player 1': [0, 1, 3, 5, 7, 0]}