使用sorted函數對字典元素排序



前言

幾天前,你要是讓我對字典的元素進行排序,我會告訴你,先用一個列表存儲要排序的元素,然后使用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]

注意:sorted()並不會影響原字典。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM