我有一本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').
任何帮助将不胜感激。
答案 0 :(得分:2)
将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中的列表用方括号[]
表示。
答案 1 :(得分:0)
您可以使用numpy.argsort
indices = np.argsort(count)
count = np.sort(count)
specialty = [specialty[i] for i in indices]
答案 2 :(得分:0)
您没有指定是否已经拥有字典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']}