簡體   English   中英

根據一個鍵的值對字典的其他鍵進行排序

[英]Sorting the other keys of a Dictionary based on values of one key

我有一本關於醫療實踐的字典P 字典的每個鍵內部都有一個列表。 我想根據一個列表對另一個列表進行排序。 例如:

我有兩個列表specialitycount ,它們是字典P一部分。 兩個列表的長度相同。

speciality = s('Cardiology' , 'Nephrology', 'ENT', 'Oncology').     
count = c(2, 7, 9, 1).

P = {'Speciliaty': speciality, 'Count': count}

假設我已經按降序對列表“計數”進行了排序。 Speciality列表也應以相同的方式進行排序,以使Speciality 'Count'項目匹配不受影響。

count = c(9, 7, 2, 1).  
speciality = s('ENT', 'Nephrology', 'Cardiology', 'Oncology').

任何幫助,將不勝感激。

zipsorted一起使用,並將reverse=True設置為反向排序:

speciality = ['Cardiology' , 'Nephrology', 'ENT', 'Oncology']
count = [2, 7, 9, 1]

count, speciality = zip(*[[x, y] for x, y in sorted(zip(count, speciality), reverse=True)])
P = {'Speciliaty': speciality, 'Count': count}

print(P)
# {'Speciliaty': ('ENT', 'Nephrology', 'Cardiology', 'Oncology'), 'Count': (9, 7, 2, 1)}


僅供參考,python中的列表用方括號[]

您可以使用numpy.argsort

indices = np.argsort(count)
count = np.sort(count)
specialty = [specialty[i] for i in indices]

您沒有指定是否已經擁有字典P或是否從代碼列表中構建字典。 對於后一種情況,可接受的答案是一種解決方法。 但是通常,如果您的字典中包含許多鍵,值對,並且您希望根據特定的鍵值對對它們進行排序,那么更干凈的解決方案是獲取一個單獨的位置列表,然后使用該列表對其他鍵進行排序值對。 下面的例子

In [12]: P
Out[12]: 
{'Count': [2, 7, 9, 1],
 'Names': ['Obi', 'Luke', 'Anakin', 'Yoda'],
 'Speciliaty': ['Cardiology', 'Nephrology', 'ENT', 'Oncology']}

In [13]: pos = [ P['Count'].index(elem) for elem in sorted(P['Count'], reverse = True) ]

In [14]: pos
Out[14]: [2, 1, 0, 3]

In [15]: for k in P:                   
    P[k] = [P[k][elem] for elem in pos]
   ....:     

In [16]: P
Out[16]: 
{'Count': [9, 7, 2, 1],
 'Names': ['Anakin', 'Luke', 'Obi', 'Yoda'],
 'Speciliaty': ['ENT', 'Nephrology', 'Cardiology', 'Oncology']}

暫無
暫無

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

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