【发布时间】:2021-10-27 21:09:15
【问题描述】:
我有一个字典列表,每个条目都具有以下结构
{
"id": 0,
"type": "notification",
"name": "jane doe",
"loc": {
"lat": 38.8239,
"long": 104.7001
},
"data": [
{
"type": "test",
"time": "Fri Aug 13 09:17:16 2021",
"df": 80000000,
"db": 1000000,
"tp": 92
},
{
"type": "real",
"time": "Sat Aug 14 09:21:30 2021",
"df": 70000000,
"db": 2000000,
"tp:": 97
}
]
}
我需要能够通过以下任意键对该列表进行排序:name, type, time, tp 并将其返回到内存中。
我了解如何按顶级键 sorted(json_list, key=lambda k:k['name']) 甚至嵌套键进行排序。例如通过 lat sorted(json_list, key=lambda k:k['loc']['lat'])
所以目前我有一个功能适用于按name 排序时的情况。
def sort_by(self, param, rev=False):
if param == NAME:
self.json_list = sorted(self.json_list, key=lambda k: k[param], reverse=rev)
else:
# need help here
我无法按type, time, and tp 排序。注意data 键也是一个字典列表。如果可能,我想利用标准库中内置的现有方法。如有必要,我可以提供更多说明
更新:
def sort_by(self, param, rev=False):
if param == NAME:
self.json_list = sorted(self.json_list, key=lambda k: k[param], reverse=rev)
else:
self.json_list = sorted(self.json_list, key=lambda k: k['data'][0][param], reverse=rev)
return self.json_list
如果data 列表中只有一项,这将正常工作
【问题讨论】:
-
如果您提供
data中的列表包含多个元素的示例,将会有所帮助。
标签: sorting dictionary data-structures nested-lists