【发布时间】:2022-01-19 09:25:13
【问题描述】:
给定字典,
test_dict = {"A" : 1, "B" : 3, "C" : 2, "D" : 3, "E" : 2}
我想通过递减值对项目进行排序,如果值相等,则通过递减键
我试过了:
res = {val[0] : val[1] for val in sorted(test_dict.items(), key = lambda x: (-x[1], -x[0]))}
我收到以下错误:
Traceback (most recent call last):
File "<string>", line 12, in <module>
File "<string>", line 12, in <lambda>
TypeError: bad operand type for unary -: 'str'
【问题讨论】:
-
x[0] 是
str,您可以使用ord(x[0])来获取它的ASCII 值。 -
仅供参考:从技术上讲,像您正在构建的 `dict` 不会排序,即使您按排序顺序插入它也是如此。如果它被排序,那或多或少是一个实现细节。 (例如 python 3.7 maintains order, apparently 但并非所有 python 3 版本都这样做)
-
@lucidbrot 从 3.7 开始,按插入顺序排序的字典是一种语言功能,需要在所有实现中保持。
-
@JoseManueldeFrutos 也许您需要按排序顺序迭代键,或者您可能需要知道最后插入的键。
-
@timgeb 你是对的(对于足够新版本的python),但我仍然觉得它很脏。我现在已经问过whether relying on it is good practise,希望能对此有所了解。
标签: python python-3.x dictionary