簡體   English   中英

以列表為值對 python 字典進行排序

[英]Sort python dictionary with list as value

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

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]}

但是我注意到這種方法對 key: MARK值進行了排序,但沒有對 key: TYPE值進行相應的排序。

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

那么我應該怎么做才能確保我排序 key: MARK它也會調整 key: TYPE值的順序?

創建(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]

您需要一個額外的 function 先獲取排序索引,然后將其應用於您的 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]

不是最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+:

請注意,由於字典是使用int鍵構建的,因此它已經按升序排序,我們不需要使用sorted(diction.items()) diction 我們可以簡單地遍歷字典並構建sorted_dict_test

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM