如何在 Python 中按值对字典进行排序?
2023-09-21 10:30:57
在 Python 中,dictionary类没有任何对其对象中的项目进行排序的规定。因此,必须使用其他一些数据结构(例如list)才能执行排序。
首先,我们的测试数据遵循具有学生姓名和标记的字典对象。
dict
类有items()返回tuples列表视图的方法,每个元组都有字典中每对的键和值。
markdict={"Tom":67, "Tina": 54, "Akbar": 87, "Kane": 43, "Divya":73}
marklist=list(markdict.items())
print(marklist)
输出:
[('Tom', 67), ('Tina', 54), ('Akbar', 87), ('Kane', 43), ('Divya', 73)]
该列表允许就地重新排列其项目。我们可以采用简单的气泡排序来根据mark
分量排列元组,如下所示。
markdict={"Tom":67, "Tina": 54, "Akbar": 87, "Kane": 43, "Divya":73}
l=len(marklist)
for i in range(l-1):
for j in range(i+1,l):
if marklist[i][1]>marklist[j][1]:
t=marklist[i]
marklist[i]=marklist[j]
marklist[j]=t
sortdict=dict(marklist)
print(sortdict)
输出:
{'Kane': 43, 'Tina': 54, 'Tom': 67, 'Divya': 73, 'Akbar': 87}
使用 sorted() 方法(Using sorted() Method)
可以理解的是,此解决方案速度慢且效率低下。Python 的内置函数库以 sorted() 函数的形式对此有更好的解决方案。
markdict = {"Tom":67, "Tina": 54, "Akbar": 87, "Kane": 43, "Divya":73}
marklist = sorted(markdict.items(), key=lambda x:x[1])
sortdict = dict(marklist)
print(sortdict)
输出:
{'Kane': 43, 'Tina': 54, 'Tushar': 67, 'Divya': 73, 'Amar': 87}
另一种选择是使用与 Python 标准库捆绑在一起的 operator
模块中定义的itemgetter()
函数。
itemgetter()
函数从其操作数返回可调用对象。
import operator
markdict = {"Tom":67, "Tina": 54, "Akbar": 87, "Kane": 43, "Divya":73}
marklist= sorted(markdict.items(), key=operator.itemgetter(1))
sortdict=dict(marklist)
print(sortdict)
输出:
{'Kane': 43, 'Tina': 54, 'Tushar': 67, 'Divya': 73, 'Amar': 87}
最后,我们将使用 dict.items()
方法和 sorted()
函数首先获取(marks, name)
元组,然后按marks
的排序顺序重建字典。
markdict = {"Tom":67, "Tina": 54, "Akbar": 87, "Kane": 43, "Divya":73}
marklist=sorted((value, key) for (key,value) in markdict.items())
sortdict=dict([(k,v) for v,k in marklist])
print(sortdict)
输出:
{'Kane': 43, 'Tina': 54, 'Tushar': 67, 'Divya': 73, 'Amar': 87}
本文内容总结: