前言
幾天前,你要是讓我對字典的元素進行排序,我會告訴你,先用一個列表存儲要排序的元素,然后使用sort()對列表元素進行排序,之后就能根據鍵-值對應情況判斷字典元素的順序。
- 比如:
用字典存儲學號和成績,輸出前三名的學號和成績。
stu = {1002: 78, 1003: 89,
1001: 77, 1006: 98,
1005: 92, 1004: 100}
score = list(stu.values())
score.sort()
for key, val in enumerate(score[::-1]):
if key < 3:
for i in stu.keys():
if stu[i] == val:
print(i, val)
- 輸出結果
1004 100
1006 98
1005 92
這是個蠢方法,費時又費力。好在我現在知道了sorted()函數,可以很方便地對字典進行排序。
sorted()函數
sorted可對所有可迭代對象進行排序操作。
sorted語法
sorted(iterable, cmp=None, key=None, reverse=False)
iterable可迭代對象cmp比較的函數。這個具有兩個參數,參數的值都是從可迭代對象中取出,此函數必須遵守的規則為,大於則返回1,小於則返回-1,等於則返回0。- 個人覺得cmp不如key好用。
key主要是用來進行比較的函數。只有一個參數,具體的函數的參數就是取自可迭代對象中,指定可迭代對象中的一個元素進行排序。reverse排序規則。reverse=True 降序, reverse=False 升序(默認)
返回值
返回重新排序的列表
sorted()給字典排序
按value值對字典排序
需要用到key參數
- 對成績進行降序排序
stu = {1002: 78, 1003: 89,
1001: 77, 1006: 98,
1005: 92, 1004: 100}
score = sorted(stu.items(), key=lambda item:item[1], reverse=True)
# 查看score
print(score)
# 取前三名
for index, val in enumerate(score):
if index < 3:
print(val[0], val[1], sep=" ")
- stu.items():將stu的鍵值對轉換為元組
dict_items([(1002, 78), (1003, 89), (1001, 77), (1006, 98), (1005, 92), (1004, 100)]) - stu.items()的每一個元素作為匿名函數的參數,返回第二個元素,也就是成績,作為key參數的比較對象。
- reverse=True:降序排序
- 輸出結果
[(1004, 100), (1006, 98), (1005, 92), (1003, 89), (1002, 78), (1001, 77)]
1004 100
1006 98
1005 92
按key值對字典排序
- 按學號進行排序
stu = {1002: 78, 1003: 89,
1001: 77, 1006: 98,
1005: 92, 1004: 100}
score = sorted(stu.items(), key=lambda item:item[0])
for index, val in enumerate(score):
print(val[0], val[1], sep=" ")
- 輸出結果
1001 77
1002 78
1003 89
1004 100
1005 92
1006 98
只對鍵或值排序
如果只想輸出鍵的排序結果或者值的排序結果。很簡單,使用dict.keys()和dict.values()作為sorted的參數就行了。
stu = {1002: 78, 1003: 89,
1001: 77, 1006: 98,
1005: 92, 1004: 100}
print(sorted(stu.keys()))
print(sorted(stu.values()))
- 輸出結果
[1001, 1002, 1003, 1004, 1005, 1006]
[77, 78, 89, 92, 98, 100]
