使用列表作为值对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)
,因此我在最初的映射中没有任何问题。但我不能分类。