使用列表作为值对python字典进行排序

使用列表作为值对python字典进行排序,python,sorting,Python,Sorting,我有一本包含值列表的词典:- dict_test = { 'TYPE' : [ 'S1', 'S2', 'S3', 'S4', 'S5' ], 'MARK' : [ 8, 11, 5, 34, 2 ] } 我正在尝试按键排序:MARK 我从上一篇文章中得到以下方法:- >>> dict((k,sorted(v)) for k, v in dict_test.items()) {'TYP

我有一本包含值列表的词典:-

dict_test = {
        'TYPE'          :       [ 'S1', 'S2', 'S3', 'S4', 'S5' ],
        'MARK'          :       [ 8, 11, 5, 34, 2 ]
}
我正在尝试按键排序:
MARK

我从上一篇文章中得到以下方法:-

>>> dict((k,sorted(v)) for k, v in dict_test.items())
{'TYPE': ['S1', 'S2', 'S3', 'S4', 'S5'], 'MARK': [2, 5, 8, 11, 34]}
但是我注意到这种方法对键进行了排序:
标记
值,但它没有相应地对键进行排序:
类型

例如,
TYPE:S1
最初映射到
MARK:8
。但是在排序之后,
TYPE:S1
被映射到
MARK:2


那么,如果我对key:
标记进行排序,我应该做些什么来确保它将调整key:
的顺序:
键入值?

您需要一个额外的函数来首先获得排序索引,然后将其应用于dict的值

例如:

# Sort MARK 
idxes = sorted(range(len(dict_test['MARK'])), key=lambda i: dict_test['MARK'][i])

dict_test['TYPE'] = [dict_test['TYPE'][i] for i in idxes]
dict_test['MARK'] = [dict_test['MARK'][i] for i in idxes]

这不是最具python风格的方法,但应该可以做到这一点

diction = {mark: type for mark, type in zip(dict_test['MARK'], dict_test['TYPE'])}

sorted_dict_test = {'TYPE': [], 'MARK': []}

for i in sorted(diction.items()):
    sorted_dict_test['MARK'].append(i[0])
    sorted_dict_test['TYPE'].append(i[1])
对于python 3.7+:


请注意,由于
diction
字典是使用
int
键构建的,因此它已按升序排序,我们不需要使用
排序(diction.items())
。我们可以简单地循环字典并构建
排序的dict\u测试
创建
(标记,类型)
对的排序列表。然后更新您的字典:

z = sorted(zip(dict_test['MARK'], dict_test['TYPE']))
dict_test['TYPE'] = [tup[1] for tup in z]
dict_test['MARK'] = [tup[0] for tup in z]

如果类型
'S1'
必须映射到8,那么它不应该像
{'S1':8}
那样开始吗?我正在这样创建字典:-
dict_test['type'].append('S1');dict_test['MARK'].append(8)
,因此我在最初的映射中没有任何问题。但我不能分类。