Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SortedDict:python中的按值排序_Python_Dictionary_Sorteddictionary - Fatal编程技术网

SortedDict:python中的按值排序

SortedDict:python中的按值排序,python,dictionary,sorteddictionary,Python,Dictionary,Sorteddictionary,是一个继承自dictionary并始终按键对元素进行排序的类。我们还可以指定它按键的某些函数进行排序,如下所示 def func(x): return -x sd = SortedDict(func) 然而,我想让它按字典的值排序。 例如: d = {0:[34, 67, 3],1:[12, 4, 9],2:[25, 3, 1]} 我想让它按每个数组的第一个元素排序,这样我就有了一个排序的dict,如下所示: sd = {1:[12, 4, 9],2:[25, 3, 1],0:[3

是一个继承自dictionary并始终按键对元素进行排序的类。我们还可以指定它按键的某些函数进行排序,如下所示

def func(x):
    return -x

sd = SortedDict(func)
然而,我想让它按字典的值排序。 例如:

d = {0:[34, 67, 3],1:[12, 4, 9],2:[25, 3, 1]}
我想让它按每个数组的第一个元素排序,这样我就有了一个排序的dict,如下所示:

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本身中键的值。这可能吗?

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

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

[(1, [12, 4, 9]), (2, [25, 3, 1]), (0, [34, 67, 3])]

有什么特别的原因让数组保持排序吗?请看-如果需要,您可以维护OrderedICT,而不只是在需要时构建并返回一个,但我相信您必须在每次插入时重建它。