[英]Sorting the other keys of a Dictionary based on values of one key
我有一本關於醫療實踐的字典P
字典的每個鍵內部都有一個列表。 我想根據一個列表對另一個列表進行排序。 例如:
我有兩個列表speciality
和count
,它們是字典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').
任何幫助,將不勝感激。
將zip
與sorted
一起使用,並將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.