【发布时间】:2021-08-10 22:57:06
【问题描述】:
我的样本数据为
b = [{"id": 1, "name": {"d_name": "miranda", "ingredient": "orange"}, "score": 1.123},
{"id": 20, "name": {"d_name": "limca", "ingredient": "lime"}, "score": 4.231},
{"id": 3, "name": {"d_name": "coke", "ingredient": "water"}, "score": 4.231},
{"id": 2, "name": {"d_name": "fanta", "ingredient": "water"}, "score": 4.231},
{"id": 3, "name": {"d_name": "dew", "ingredient": "water & sugar"}, "score": 2.231}]
我需要对score ASC, name DESC, id ASC 进行排序(通过关系数据库表示法)。
到目前为止,我已经实现了
def sort_func(e):
return (e['score'], e['name']['d_name'], e['id'])
a = b.sort(key=sort_func, reverse=False)
这适用于score ASC, name ASC, id ASC。
但是对于score ASC, name DESC, id ASC,如果我尝试按name DESC 排序,则会引发错误。因为unary - error 中的-e['name']['d_name']。
我该如何从这里解决这个问题?谢谢,
编辑 1:
我需要使这种动态化,以便可以出现e['name'['d_name'] ASC, e['name']['ingredient'] DESC 之类的情况。我该如何处理这种类型的动态行为?
【问题讨论】:
标签: python list sorting dictionary