python根據字典內的值實現排序

可憐你帥不瀛阪本大姥發表於2020-11-01

“”"

要求:在這裡插入圖片描述

2020/11/1,
看了書本130之後的內容,發現還是不會,於是我搜了一篇優秀的部落格

no1=dict(name1="餘浩然",avg1="80")
no2=dict(name2="呂布",avg2="80")
no3=dict(name="張飛",avg="90")
dir1=dict(no1,**no2)
b=zip(dir1.values(),dir1.keys())
c=list(sorted(b))
print(c)

因為涉及到排序問題,首先想到了python的內建函式sorted ,
比如對列表進行排序 ,排序的結果是對列表按照從小到大來排列

那麼是不是也可以使用sorted方法對字典進行排序呢 ,結果只對字典的鍵進行了排序 ,
是按照鍵的ASCii碼來排列的 ,不是按照值,何況結果中連值都沒有展示出來。
所以直接使用sorted 函式對字典按照值得大小來排序是行不通的 。

那麼需要展示的結果應該是包含值和鍵的 ,想到了元組(a,34)>(a,35) 對元組進行比較大小 ,
而如果把鍵放在第一個的話,還是比較的鍵的大小,而不是值,所以 需要把值放在第一個,鍵放在後面。
思路來了,把字典的資料轉換為元祖 使用zip函式。zip(值,鍵)

想得到字典的值和鍵 非常簡單 即d.keys()和d.values()

zip(b.values(),b.keys())就把字典資料轉換成了元組資料。
因為用的直譯器的版本是3.7 對zip的用法做了修改,可以看到返回的是一個物件,如果想要得到list可以用list(b),進行強轉,得到想要的結果。

但這樣得出的結果是
[(‘80’, ‘avg1’), (‘80’, ‘avg2’), (‘餘浩然’, ‘name1’), (‘呂布’, ‘name2’)]
只是對字典內的值排序了,但沒有考慮到鍵和值之間的關係
所以我這種想法可能在現階段,甚至是在目前,沒有辦法利用一種函式什麼的給排序的
所以只能換一個思路:我把餘浩然直接當鍵值使用,把80當做成績肯定是可以排序的吧程式碼如下:
“”"

dir1=dict(餘浩然="80",張飛="90",呂布="80")
b=zip(dir1.values(),dir1.keys())
c=list(sorted(b,reverse = True))
print(c)

得到結果[(‘80’, ‘餘浩然’), (‘80’, ‘呂布’), (‘90’, ‘張飛’)],成功對其排序,但感覺太簡單了,不是老師要求的那種

強化版本,字典裡面套字典,有想法是好的,可惜這個沒法實現,待後續進行解決

 dir1=dict(餘浩然={"avg":85,"math":80,"English":90},張飛={"avg":77.5,"math":75,"English":80},呂布={"avg":85,"math":95,"English":75})
 b=zip(dir1.keys())
 c=list(sorted(b,reverse = True))
 print(c)

相關文章