SortedDict:python中的按值排序
是一个继承自dictionary并始终按键对元素进行排序的类。我们还可以指定它按键的某些函数进行排序,如下所示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
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,而不只是在需要时构建并返回一个,但我相信您必须在每次插入时重建它。