日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Python根據字典值對字典進行排序的三種方法實例_python

作者:嵌入式技術 ? 更新時間: 2022-11-07 編程語言

一、實際場景及解決思路

實際場景:比如某個班的數學成績以字典格式存儲為:

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

實際字典存儲是隨機排序的,本文給出根據每個學生的成績對學生字典格式數據進行排序,并將排序結果返回給字典中的解決方法。

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

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

二、字典排序的三種實現方法

2.1 使用列表解析方法實現字典排序

方案1使用列表解析方法實現

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

Python代碼如下所示:

from random import randint

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

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

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

# 輸出結果:
print(student_tuplelist_sorted)

代碼執行結果如下圖所示:

2.2 使用zip方法實現字典排序

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

Python代碼如下所示:

from random import randint

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

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

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

# 輸出結果:
print(student_tuplelist_sorted)

2.3 使用傳遞sorted函數的key參數實現字典排序

(1)由于sorted方法有一個key參數,它可以指定排序對象是按照字典哪類元素(鍵值或者值)進行排序;
(2)需要注意的是對于key參數我們需要使用lambda匿名函數作為迭代器key=lambda x: x[1],依次訪問學生字典的值;sorted函數的學生字典傳入方法為student_dict.items()
(3)使用sorted函數的key參數對字典數據進行排序,代碼顯得更加簡潔。

Python實現代碼如下所示:

from random import randint

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

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

# 3.輸出結果
print(student_tuplelist_sorted)

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

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

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

由上圖可以看出,enumerate函數的輸出元組列表格式為(序號, ('student_x', 考試分數))。使用for循環可以依次讀取enumerate中的內容,并重新構建學生字典。代碼如下所示:

from random import randint

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

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

# 3.使用for循環結合內置函數enumerate重新構建排序后的字典:
student_dict_sorted = {}
for rank, (stu_key, stu_val) in enumerate(
							student_tuplelist_sorted, 1):
	# 重新構造帶有排名的排序后的學生字典student_dict_sorted
	student_dict_sorted[stu_key] = (rank, stu_val)

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

代碼執行結果如下圖所示:

總結?

原文鏈接:https://blog.csdn.net/weixin_37926734/article/details/124028703

欄目分類
最近更新