首页 > 解决方案 > 按值对 Python 字典进行排序;value 是一个包含两项的列表;对第一个列表项进行常规排序,对第二项进行反向排序

问题描述

我有一个字典,它的值都是两项列表(关键是一个六项元组,但我们不会进入那个)。

这是一个可视化:

my_ridiculous_dict = {
    ('0', '2', '0', '4', '0', '1'): [1, 1000], 
    ('5', '3', '0', '2', '0', '0'): [1, 400], 
    ('3', '6', '0', '2', '0', '0'): [2, 3000], 
    ('4', '3', '0', '2', '0', '0'): [2, 80], 
    ('0', '0', '3', '9', '0', '3'): [3, 0]
}

我需要先按值列表中的第一项对其进行排序,然后对第二项进行反向排序。因此,您在上面看到的内容将被正确排序

抱歉,如果已解决此问题,但是我在按值排序字典时看到的所有问题似乎都假定一个简单的 int 或 str 作为值,并且鉴于此,我很难理解 lambda 或 itemgetters 的使用增加了复杂性。

应该提到我不介意分两次这样做,只是想完成!

提前谢谢了。

标签: pythonsortingdictionary

解决方案


字典不是要排序的,但如果将项目复制到列表中,则可以对列表进行排序。

mrd = {
('4', '3', '0', '2', '0', '0'): [2, 80], 
('0', '2', '0', '4', '0', '1'): [1, 1000], 
('3', '6', '0', '2', '0', '0'): [2, 3000], 
('5', '3', '0', '2', '0', '0'): [1, 400], 
('0', '0', '3', '9', '0', '3'): [3, 0]
}

lst = list(mrd)
lst.sort(key=lambda x:[mrd[x][0], -mrd[x][1]])
for i in lst: print(i, mrd[i])

输出:

('0', '2', '0', '4', '0', '1') [1, 1000]
('5', '3', '0', '2', '0', '0') [1, 400]
('3', '6', '0', '2', '0', '0') [2, 3000]
('4', '3', '0', '2', '0', '0') [2, 80]
('0', '0', '3', '9', '0', '3') [3, 0]

推荐阅读