在排序值时保留字典的键

时间:2018-05-27 11:55:21

标签: python-3.x sorting dictionary

我有以下排序功能:

orderedX = np.array(list(to_sort.values()))\
[np.array(list(to_sort.values())).argmax(axis=1).argsort(), :]

但是我想改变它,以便,orderedX变成一个包含to_sort项的字典,而不仅仅是它的值列表。因此,它的排序方式是正确的,但是在某种程度上我还可以在执行此操作时跟踪密钥吗?

to_sort是一个带键和值的字典,其中每个值都是np.array

1 个答案:

答案 0 :(得分:1)

词典的问题在于它们通常不会保留秩序。即使使用Python 3.6对dict实现的更改,docs也表示"这个新实现的顺序保留方面不应该依赖于" 。 Here另一个问题在于详细解释,特别是Martijn Pieters'答案。

话虽如此,仍有collections.OrdererDict确实有订单保存。以下是如何根据数据创建所需排序的方法。请注意,我尝试简化排序算法,据我所知,按to_sort的值中的最大值排序:

from collections import OrderedDict
ordered = OrderedDict(sorted(to_sort.items(), key=lambda item:np.max(item[1])))

像这样迭代它将为您提供按键排序的值的键和值:

for key, value in ordered.items():
    print(key, value)