首页 > 解决方案 > SortedDict:在python中按值排序

问题描述

SortedDict是一个继承自字典的类,并且始终保持元素按键排序。我们还可以指定它按照键的某些功能进行排序,如下所示。

def func(x):
    return -x

sd = SortedDict(func)

但是,我想让它按字典的值排序。例如:

d = {0:[34, 67, 3],1:[12, 4, 9],2:[25, 3, 1]}

我希望它按每个数组的第一个元素排序,这样我就有一个排序的字典,如下所示:

sd = {1:[12, 4, 9],2:[25, 3, 1],0:[34, 67, 3]}

我有办法吗?如果我执行以下操作:

def func(x):
   return d[x][0]

这不是一个永久的解决方案,因为如果我更新我的排序字典:

sd.update({4:[6,5,9]})

我从原始字典中得到一个关键错误。

我需要一种方法来让函数访问 sd 本身的键值。这可能吗?

标签: pythondictionarysorteddictionary

解决方案


我相信你不能订购字典。如果您想使用键保持顺序,可以使用您的键位于第一个或最后一个位置的数组数组。您可以使用 sorted 函数对字典进行排序,但它不会按顺序返回字典对象

d = {0:[34, 67, 3],1:[12, 4, 9],2:[25, 3, 1]}
d_sorted = dict(sorted(d.items(), key=lambda kv: kv[1][0]))

返回

{1: [12, 4, 9], 2: [25, 3, 1], 0: [34, 67, 3]}

推荐阅读