Python中給字典排序的七種方法詳解
引言
我們經(jīng)常在計(jì)算機(jī)等級(jí)考試中遇到詞頻排序的問題,我們一般先通過生成字典的方法,統(tǒng)計(jì)詞的頻次,然后給字典排序。
那么如何快速地給字典按照鍵值進(jìn)行排序呢?下面介紹七種方法。第一種方法相對比較常見,但是第二種方法你可能第一次見,第三種方法是比較麻煩的一種,還有一些讓步意想不到的幾種方法供你參考。
例:有下面的列表dic={'a': 4, 'b': 3, 'c': 2, 'd': 1},如何實(shí)現(xiàn)字典的升序排列呢?
第一種方法:利用自定義函數(shù)lambda
>>> dic={'a': 4, 'b': 3, 'c': 2, 'd': 1} >>> sorted(dic.items(), key=lambda x: x[1]) [('d', 1), ('c', 2), ('b', 3), ('a', 4)]
這里,通過dic.items()獲取由字典鍵名和鍵值組成的元組列表,然后通過自定義函數(shù),獲取元組的第2個(gè)元素,作為排序的依據(jù)即key, 默認(rèn)是按照升序排列,如果是降序排列可以把reverse設(shè)為True,即:
>>> dic={'a': 4, 'b': 3, 'c': 2, 'd': 1} >>> sorted(dic.items(), key=lambda x: x[1],reverse=True) {'a': 4, 'b': 3, 'c': 2, 'd': 1}
第二種方法:利用operator的方法
>>> import operator >>> sorted(dic.items(), key=operator.itemgetter(1)) [('d', 1), ('c', 2), ('b', 3), ('a', 4)]
operator. itemgetter(item) operator. itemgetter(*items)
功能是返回一個(gè)可調(diào)用對象,該對象可以使用操作__getitem__()方法從自身的操作中捕獲item。如果制定了多個(gè)items,返回一個(gè)由查詢值組成的元組。例如:運(yùn)行f =itemgetter(2),然后調(diào)用f(r),返回r[2]。這里通過operator獲得了dic.items()中的鍵值。注意operator是內(nèi)置的包,無需安裝。
第三種方法:列表推導(dǎo)式法
>>> dic={'a': 4, 'b': 3, 'c': 2, 'd': 1} >>> tup=[(x[1],x[0]) for x in dic.items()]#元素互換位置 >>> sorted(tup) #排序 [(1, 'd'), (2, 'c'), (3, 'b'), (4, 'a')] >>> [(x[1],x[0]) for x in dic.items()] >>> [(x[1],x[0]) for x in tup] #換回原來的位置 >>> [('d', 1), ('c', 2), ('b', 3), ('a', 4)]
用列表推導(dǎo)式,交換元組中元素的位置,排序后再交換回來,這種方法有點(diǎn)兒麻煩,但是邏輯清楚,適合新手。還有哪些好的方法,歡迎大家提出來,一起來交流。
第四種方法:用Counter的方法
from collections import Counter dic={'a': 4, 'b': 3, 'c': 2, 'd': 1} count = Counter(dic) print(list(count.items()))
第五種方法:利用pandas的方法
如果進(jìn)行數(shù)據(jù)分析,可以把字典讀取成數(shù)據(jù)框,然后采用pandas進(jìn)行排序,效果也非常不錯(cuò)。
import pandas as pd dic = {'a': 4, 'b': 3, 'c': 2, 'd': 1} df = pd.DataFrame.from_dict(dic, orient='index').reset_index() df.columns = ['key', 'value'] df_sorted = df.sort_values(by='value').reset_index(drop=True) # 如果你想要得到一個(gè)排序后的字典 sorted_dic = dict(zip(df_sorted['key'], df_sorted['value'])) print(sorted_dic) # 輸出: {'d': 1, 'c': 2, 'b': 3, 'a': 4}
第六種方法:自定義函數(shù)法
可以自定義一個(gè)函數(shù),把字典和排序的方式作為參數(shù)傳入,這樣需要排序時(shí)就可以直接調(diào)用此函數(shù)來進(jìn)行,可以簡化代碼,如下扭示:
def sort_dict_by_value(d, reverse=False): return dict(sorted(d.items(), key=lambda x: x[1], reverse=reverse)) dic = {'a': 4, 'b': 3, 'c': 2, 'd': 1} sorted_dic = sort_dict_by_value(dic) sorted_dic_desc = sort_dict_by_value(dic, reverse=True) print(sorted_dic_desc) # 輸出: {'a': 4, 'b': 3, 'c': 2, 'd': 1}
第七種方法:字典推導(dǎo)式法
字典推導(dǎo)式據(jù)有簡單直接,運(yùn)行速度快等特點(diǎn),不需要導(dǎo)出其它的包,也不需要引用什么模塊,排序效率非常的高,值得推薦。
dic = {'a': 4, 'b': 3, 'c': 2, 'd': 1} # 使用sorted()和字典推導(dǎo)式按值排序 sorted_dic = {k: v for k, v in sorted(dic.items(), key=lambda x: x[1])} print(sorted_dic) # 輸出: {'d': 1, 'c': 2, 'b': 3, 'a': 4} # 如果需要降序 sorted_dic_desc = {k: v for k, v in sorted(dic.items(), key=lambda x: x[1], reverse=True)} print(sorted_dic_desc) # 輸出: {'a': 4, 'b': 3, 'c': 2, 'd': 1}
學(xué)后總結(jié)
以上七種方法殊途同歸,都可以實(shí)現(xiàn)字典的排序,但是第一種方法是Python二級(jí)中采用的慣常作法,容易理解,請大家牢記憶。
counter和operator的方法也很簡單,可以作為備用。積累常見的字典排序方法,可以幫助我們鞏固基礎(chǔ)知識(shí),舉一反三,深化理解。
到此這篇關(guān)于Python中給字典排序的七種方法詳解的文章就介紹到這了,更多相關(guān)Python字典排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python執(zhí)行shell并獲取結(jié)果的詳細(xì)示例
在Python中執(zhí)行Shell命令并獲取其結(jié)果,通??梢允褂胹ubprocess模塊,這個(gè)模塊允許我們啟動(dòng)新的進(jìn)程,連接到它們的輸入/輸出/錯(cuò)誤管道,并獲取它們的返回碼,下面是一個(gè)詳細(xì)的示例,展示了如何使用subprocess.run()函數(shù)來執(zhí)行Shell命令并獲取其輸出,需要的朋友可以參考下2024-07-07Python 僅獲取響應(yīng)頭, 不獲取實(shí)體的實(shí)例
今天小編就為大家分享一篇Python 僅獲取響應(yīng)頭, 不獲取實(shí)體的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08pandas滑動(dòng)窗口學(xué)習(xí)筆記(shift, diff, pct_change)
pandas中有3類窗口,分別是滑動(dòng)窗口rolling?、擴(kuò)張窗口expanding以及指數(shù)加權(quán)窗口ewm,下面就來詳細(xì)的介紹一下這三種的用法,感興趣的可以了解一下2024-03-03pygame實(shí)現(xiàn)井字棋之第二步邏輯實(shí)現(xiàn)
這篇文章主要介紹了pygame實(shí)現(xiàn)井字棋之第二步邏輯實(shí)現(xiàn),文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-05-05pycharm安裝教程(下載安裝以及設(shè)置中文界面)
這篇文章主要給大家介紹了關(guān)于pycharm安裝教程,文中包括下載安裝以及設(shè)置中文界面,PyCharm是一款Python IDE,其帶有一整套可以幫助用戶在使用Python語言開發(fā)時(shí)提高其效率的工具,需要的朋友可以參考下2023-10-10Python實(shí)現(xiàn)將字典內(nèi)容保存到Excel文件的四種方法
Python 中的字典是一個(gè)數(shù)據(jù)集合,其中每個(gè)值對應(yīng)一個(gè)鍵,它們是無序的、可變的,并且對字典中存儲(chǔ)的值和鍵的數(shù)據(jù)類型沒有限制,本文給大家介紹了Python實(shí)現(xiàn)將字典內(nèi)容保存到Excel文件的四種方法,需要的朋友可以參考下2024-07-07python利用re,bs4,requests模塊獲取股票數(shù)據(jù)
這篇文章主要介紹了python利用re,bs4,requests模塊獲取股票數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07