網站首頁 編程語言 正文
一、實際場景及解決思路
實際場景:比如某個班的數學成績以字典格式存儲為:
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
相關推薦
- 2022-03-28 c語言經典習題之逆序字符串詳解_C 語言
- 2022-07-11 Python利用xlrd?與?xlwt?模塊操作?Excel_python
- 2022-07-11 UVM中uvm_config_db在sequence中的使用
- 2023-03-15 pandas計算相關系數corr返回空的問題解決_python
- 2022-06-08 FreeRTOS動態內存分配管理heap_1示例_操作系統
- 2023-08-15 nginx 開啟壓縮
- 2023-03-20 淺談Redis在秒殺場景的作用_Redis
- 2022-06-20 go語言實現屏幕截圖的示例代碼_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支