【问题标题】:keep keys of dictionary while sorting the values在对值进行排序时保留字典的键
【发布时间】:2018-05-27 11:55:20
【问题描述】:

我有以下排序功能:

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

但我想将其更改为,orderedX 成为包含 to_sort 项的字典,而不仅仅是其值的列表。所以它的排序方式是正确的,但是有没有办法我也可以在这样做的时候跟踪键?

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

【问题讨论】:

  • 您能否展示一个小示例输入和输出来说明您正在尝试做什么?

标签: python-3.x sorting dictionary


【解决方案1】:

字典的问题在于它们通常不保持顺序。即使 Python 3.6 对 dict 的实现进行了更改,docs 表示“不应依赖此新实现的顺序保留方面 [...]”。 Here 的另一个 SO 问题对此进行了详细解释,请特别注意 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 2015-06-06
    • 2018-07-26
    相关资源
    最近更新 更多