最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python根據(jù)字典值對字典進(jìn)行排序的三種方法實例

 更新時間:2022年09月15日 11:04:55   作者:嵌入式技術(shù)  
Python中的字典是無序類型,沒有自己的排序方法,下面這篇文章主要給大家介紹了關(guān)于Python根據(jù)字典值對字典進(jìn)行排序的三種方法,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、實際場景及解決思路

實際場景:比如某個班的數(shù)學(xué)成績以字典格式存儲為:

student_dict = {
	'xiaoliang': 81,
	'xiaowang' : 92,
	'xiaoxin'  : 99,
	......
}

實際字典存儲是隨機(jī)排序的,本文給出根據(jù)每個學(xué)生的成績對學(xué)生字典格式數(shù)據(jù)進(jìn)行排序,并將排序結(jié)果返回給字典中的解決方法。

解決思路:將字典中的元素轉(zhuǎn)換為元組,使用內(nèi)置函數(shù)sorted排序。由于Python內(nèi)置方法sorted并不能直接對字典進(jìn)行操作,所以需要首先將字典格式數(shù)據(jù)轉(zhuǎn)換為元組列表數(shù)據(jù)格式,然后使用sorted進(jìn)行排序,常用的方法包括三種:

  • 方法1使用列表解析方法實現(xiàn)
  • 方法2(推薦)使用zip方法實現(xiàn)
  • 方法3(高級用法)傳遞sorted函數(shù)的key參數(shù)

二、字典排序的三種實現(xiàn)方法

2.1 使用列表解析方法實現(xiàn)字典排序

方案1使用列表解析方法實現(xiàn)

(1)使用列表解析方法將字典中的像轉(zhuǎn)化為(value, key)的元組格式,然后使用sorted方法實現(xiàn)排序;
(2)注意:元組比較大小是根據(jù)第一個元素value決定的輸出的真假,當(dāng)?shù)谝粋€元素value相同時候,才比較第二個,依次類推。

Python代碼如下所示:

from random import randint

# 1.創(chuàng)建一個包含20個學(xué)生名及成績的字典創(chuàng)建方法
student_dict = {'student_%d' % i: randint(50, 100) 
								for i in range(1, 21)}

# 2.使用列表解析方法將學(xué)生字典轉(zhuǎn)換為(value, key)的元組格式
student_tuplelist = [(stu_value, stu_key) for stu_key, stu_value
					in student_dict.items()]
# 查看以下轉(zhuǎn)換后的效果
print(student_tuplelist)

# 3.使用sorted函數(shù)對元組列表student_list由分?jǐn)?shù)高低進(jìn)行排序
student_tuplelist_sorted = sorted(student_tuplelist, 
										reverse=True)

# 輸出結(jié)果:
print(student_tuplelist_sorted)

代碼執(zhí)行結(jié)果如下圖所示:

2.2 使用zip方法實現(xiàn)字典排序

(1)使用zip方法將字典中的像轉(zhuǎn)化為(value, key)的元組格式,然后使用sorted方法實現(xiàn)排序;
(2)注意zip的輸出為一個zip對象(zip object),需要使用列表構(gòu)造器list才能轉(zhuǎn)換為元組列表;
(3)結(jié)合下圖zip函數(shù)的功能,使用zip將學(xué)生字典轉(zhuǎn)換為元組列表的方法為:list(zip(student_dict.values(), student_dict.keys()))。

Python代碼如下所示:

from random import randint

# 1.創(chuàng)建一個包含20個學(xué)生名及成績的字典創(chuàng)建方法
student_dict = {'student_%d' % i: randint(50, 100) 
								for i in range(1, 21)}

# 2.使用zip方法將學(xué)生字典轉(zhuǎn)換為(value, key)的元組格式
student_tuplelist = list(zip(student_dict.values(),
									student_dict.keys()))
# 查看以下轉(zhuǎn)換后的效果
print(student_tuplelist)

# 3.使用sorted函數(shù)對元組列表student_list由分?jǐn)?shù)高低進(jìn)行排序
student_tuplelist_sorted = sorted(student_tuplelist, 
										reverse=True)

# 輸出結(jié)果:
print(student_tuplelist_sorted)

2.3 使用傳遞sorted函數(shù)的key參數(shù)實現(xiàn)字典排序

(1)由于sorted方法有一個key參數(shù),它可以指定排序?qū)ο笫前凑兆值淠念愒兀ㄦI值或者值)進(jìn)行排序;
(2)需要注意的是對于key參數(shù)我們需要使用lambda匿名函數(shù)作為迭代器key=lambda x: x[1],依次訪問學(xué)生字典的值;sorted函數(shù)的學(xué)生字典傳入方法為student_dict.items()。
(3)使用sorted函數(shù)的key參數(shù)對字典數(shù)據(jù)進(jìn)行排序,代碼顯得更加簡潔。

Python實現(xiàn)代碼如下所示:

from random import randint

# 1.創(chuàng)建一個包含20個學(xué)生名及成績的字典創(chuàng)建方法
student_dict = {'student_%d' % i: randint(50, 100) 
								for i in range(1, 21)}

# 2.傳遞`sorted`函數(shù)的`key`參數(shù)實現(xiàn)學(xué)生字典數(shù)據(jù)的排序
student_tuplelist_sorted = sorted(student_dict.items(), 
								key=lambda x: x[1], reverse=True)

# 3.輸出結(jié)果
print(student_tuplelist_sorted)

三、將sorted排序的列表返回給字典

上面三種方案對學(xué)生字典數(shù)據(jù)進(jìn)行排序后返回的是一個元素為元組的列表,而如果我們需要的還是字典格式,可以使用python的內(nèi)置函數(shù)enumerate實現(xiàn)。對返回的元組列表排序結(jié)果使用enumerate后的輸出為一個枚舉對象(enumerate object),結(jié)果如下圖所示:

這里需要使用列表生成器list(enumerate(student_tuplelist_sorted, 1))讀取其中的元素,其中參數(shù)1表示初始標(biāo)號為1,輸出結(jié)果如下圖所示:

由上圖可以看出,enumerate函數(shù)的輸出元組列表格式為(序號, ('student_x', 考試分?jǐn)?shù)))。使用for循環(huán)可以依次讀取enumerate中的內(nèi)容,并重新構(gòu)建學(xué)生字典。代碼如下所示:

from random import randint

# 1.創(chuàng)建一個包含20個學(xué)生名及成績的字典創(chuàng)建方法
student_dict = {'student_%d' % i: randint(50, 100) 
								for i in range(1, 21)}

# 2.使用傳遞`sorted`函數(shù)的`key`參數(shù)的方法對字典進(jìn)行排序
student_tuplelist_sorted = sorted(student_dict.items(), 
							key=lambda x: x[1], reverse=True)

# 3.使用for循環(huán)結(jié)合內(nèi)置函數(shù)enumerate重新構(gòu)建排序后的字典:
student_dict_sorted = {}
for rank, (stu_key, stu_val) in enumerate(
							student_tuplelist_sorted, 1):
	# 重新構(gòu)造帶有排名的排序后的學(xué)生字典student_dict_sorted
	student_dict_sorted[stu_key] = (rank, stu_val)

# 4.查看結(jié)果
print("帶有名次的排序后學(xué)生字典:", student_dict_sorted) 

代碼執(zhí)行結(jié)果如下圖所示:

總結(jié) 

到此這篇關(guān)于Python根據(jù)字典值對字典進(jìn)行排序的三種方法的文章就介紹到這了,更多相關(guān)Python根據(jù)字典值對字典排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python使用docx模塊讀寫docx文件的方法與docx模塊常用方法詳解

    python使用docx模塊讀寫docx文件的方法與docx模塊常用方法詳解

    這篇文章主要介紹了python使用docx模塊讀寫docx文件的方法與docx模塊常用方法詳解,需要的朋友可以參考下
    2020-02-02
  • Python下載網(wǎng)絡(luò)小說實例代碼

    Python下載網(wǎng)絡(luò)小說實例代碼

    這篇文章主要介紹了Python下載網(wǎng)絡(luò)小說實例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Python數(shù)值求解微分方程方法(歐拉法,隱式歐拉)

    Python數(shù)值求解微分方程方法(歐拉法,隱式歐拉)

    這篇文章主要介紹了Python數(shù)值求解微分方程方法(歐拉法,隱式歐拉),文章圍繞主題展開詳細(xì)的內(nèi)介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • 解決os.path.isdir() 判斷文件夾卻返回false的問題

    解決os.path.isdir() 判斷文件夾卻返回false的問題

    今天小編就為大家分享一篇解決os.path.isdir() 判斷文件夾卻返回false的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python生成pdf文件的方法

    Python生成pdf文件的方法

    這篇文章主要介紹了Python生成pdf文件的方法,比較實用的功能,需要的朋友可以參考下
    2014-08-08
  • 詳解python單例模式與metaclass

    詳解python單例模式與metaclass

    這篇文章主要介紹了python單例模式與metaclass,文章介紹了單例模式的實現(xiàn)方式
    2016-01-01
  • python中pyplot直方圖的繪制方式

    python中pyplot直方圖的繪制方式

    這篇文章主要介紹了python中pyplot直方圖的繪制方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 超級好用的4個Python命令行可視化庫

    超級好用的4個Python命令行可視化庫

    通常大家都是在自己的電腦上跑程序,直接是可以可視化相應(yīng)的結(jié)果.如果是在服務(wù)器上的話,使用終端,是不太方便查看結(jié)果. 今天,小F就給大家介紹4個可以在命令行中使用的Python庫. 分別是Bashplotlib、tqdm、PrettyTable、Colorama,需要的朋友可以參考下
    2021-06-06
  • python 模擬登陸github的示例

    python 模擬登陸github的示例

    這篇文章主要介紹了python 模擬登陸github的示例代碼,幫助大家更好的理解和學(xué)習(xí)python 爬蟲的相關(guān)知識,感興趣的朋友可以了解下
    2020-12-12
  • 如何在Python中創(chuàng)建二叉樹

    如何在Python中創(chuàng)建二叉樹

    這篇文章主要介紹了如何在Python中創(chuàng)建二叉樹,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03

最新評論

扎鲁特旗| 甘南县| 南平市| 新河县| 南汇区| 盐城市| 齐河县| 肇州县| 饶阳县| 商洛市| 仁布县| 宣汉县| 梧州市| 阜平县| 南召县| 壶关县| 石城县| 永善县| 梁山县| 武安市| 汪清县| 荥阳市| 金昌市| 综艺| 安西县| 平果县| 兴海县| 望城县| 雷山县| 广州市| 南昌市| 广饶县| 周宁县| 津南区| 景谷| 平安县| 辛集市| 罗田县| 涡阳县| 准格尔旗| 宜君县|