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

时间:2020-05-24 05:03:13

标签: 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())
{'TYPE': ['S1', 'S2', 'S3', 'S4', 'S5'], 'MARK': [2, 5, 8, 11, 34]}

但是我注意到这种方法对键:MARK值进行了排序,但是没有对键:TYPE值进行相应的排序。

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

那我该怎么做才能确定是否对键MARK进行排序?它也会调整键TYPE的值的顺序吗?

3 个答案:

答案 0 :(得分:1)

创建(MARK, TYPE)对的排序列表。然后更新您的字典:

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]

答案 1 :(得分:0)

您需要一个额外的功能来首先获取排序索引,然后将其应用于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]

答案 2 :(得分:0)

不是大多数pythonic方法,但这应该可以解决问题。

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键构建的,因此它已经升序了,我们不需要使用sorted(diction.items())。我们可以简单地遍历字典并构建sorted_dict_test

相关问题