python - 按值对 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 的使用增加了复杂性。
应该提到我不介意分两次这样做,只是想完成!
提前谢谢了。
解决方案
字典不是要排序的,但如果将项目复制到列表中,则可以对列表进行排序。
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]