-2

定义:

diction = {"Book":(1, 2), "Armchair":(2, 2), "Lamp":(1, 3)}

如果要按 item["key"][1] 降序和“keys”升序对字典进行排序,那么合适的方法是什么?

期望的输出:

diction = {"Lamp":(1, 3), "Armchair":(2, 2), "Book":(1, 2)}

收到思南的正确答案后请注意,我没有问升序或降序排序,您给我发了相关链接!我问要同时做这两个问题,这不是由思南给出的减号技巧所解决的。

4

1 回答 1

1

主要思想是从这里复制过来的。

from collections import OrderedDict
diction = {"Book":(1, 2), "Armchair":(2, 2), "Lamp":(1, 3)}
diction_list = list(diction.items())
diction = OrderedDict(sorted(diction_list, key=lambda x: (-x[1][1], x[0])))
print(diction)

OrderedDict([('Lamp', (1, 3)), ('Armchair', (2, 2)), ('Book', (1, 2))])

这是魔术发生的地方:

sorted(diction_list, key=lambda x: (-x[1][1], x[0]))

sorted为你整理东西。它非常擅长。如果将key参数与 sort 一起使用,则可以给它一个函数,用于每个要排序的项目。在这种情况下,我们给出 alambda从元组中返回负值-x[1][1](这是元组中的第二个值)和键x[0]。负号使其反向排序。当然,这不适用于非数字值。

OrderedDict不是绝对必要的。Python 在我认为的 3.6 版(或者是 3.7 版?)之后保持 dict 的顺序。OrderedDicts 总是保持相同的顺序,所以它就在那里,所以我们的 dict 保持有序,独立于 Python 版本。

有关执行此操作的更好方法,请参阅Python 文档中的排序方法。

于 2020-02-22T23:53:54.713 回答