python - 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 本身的键值。这可能吗?
解决方案
我相信你不能订购字典。如果您想使用键保持顺序,可以使用您的键位于第一个或最后一个位置的数组数组。您可以使用 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]}
推荐阅读
- video-streaming - 服务器端视频流录制
- c# - 如何在asp.net mvc中从另一个控制器显示一个id项目到另一个控制器
- javascript - `bulkWrite` 和 `insertOne/updateOne` 在 mongodb 中不能像我预期的那样工作?
- c# - 将具有 xml 字符串属性的 IQueryable 源映射到 IQueryable 目标
- c# - 当 Kafka Consumer 订阅事件时,它显示 Timed out 1 in-flight
- twilio - 使用 Twilio 将排队的呼叫转移到会议
- kubernetes - 如何在 kubernetes 集群中配置 kubectl
- r - 如何通过 R 或通过 wsf/vb/bat 文件登录彭博终端?
- listview - Xamarin Forms:RepeaterView 不绑定动态数据,但使用 listView 它可以工作
- javascript - 使用来自 JSON 的数据从 Javascript 更改 Html 内容