成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何排序Python字典

這篇文章主要介紹“如何排序Python字典”,在日常操作中,相信很多人在如何排序Python字典問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何排序Python字典”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

創(chuàng)新互聯(lián)建站是專業(yè)的鹽池網(wǎng)站建設(shè)公司,鹽池接單;提供網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行鹽池網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

字典是Python語言中的一種數(shù)據(jù)結(jié)構(gòu),每一個(gè)字典元素是由一對key-value組成的。而字典的key和value分別以集合(Set)形似組織,以便快速查詢。集合的存儲形似通常是樹的結(jié)構(gòu),所以搜索非??臁N覀兛梢詥为?dú)通過字典的keys方法和values方法獲取鍵集合和值集合的可迭代對象,代碼如下:

x = {'x':20,'a':12,'b':5} print(x.keys()) print(x.values())

執(zhí)行這段代碼,會輸出如下的內(nèi)容:

dict_keys(['x', 'a', 'b']) dict_values([20, 12, 5])

PS:dict_keys和dict_values是Python的兩個(gè)內(nèi)部類,他們都采用了樹的結(jié)構(gòu)對數(shù)據(jù)進(jìn)行組織?,F(xiàn)在的問題是,集合是無序的(因?yàn)槭且詷錉罱Y(jié)構(gòu)存儲的),但由于某些要求,我們期望得到有序的鍵值,這就引出了下面的幾個(gè)問題:

Q1:集合可以排序嗎?

Q2:排序后,可以獲取成對的key-value嗎?

Q3:除了按鍵值排序,可以按值排序嗎?

為了回答這幾個(gè)問題,請繼續(xù)看下面的內(nèi)容。

1.  集合可以排序嗎?

這個(gè)問題的答案是:No。既然稱為集合,由于數(shù)據(jù)存儲形式的原因,肯定是無序的,但我們可以做一個(gè)折中的處理。既然集合不能排序,那么可以將集合中的數(shù)據(jù)排序后,放到一個(gè)可以排序的數(shù)據(jù)結(jié)構(gòu)(例如,列表)里,這樣可以在一定程度上解決我們的問題??聪旅娴拇a:

x = {'x':20,'a':12,'b':5} keys = sorted(x.keys()) values = sorted(x.values()) print(type(keys)) print(type(values)) print(keys) print(values)

在這段代碼中,使用了sorted函數(shù),該函數(shù)可以用于對序列進(jìn)行排序,并將排序結(jié)果放到一個(gè)列表中,最后返回這個(gè)列表,所以執(zhí)行這段代碼,會輸出如下的內(nèi)容:

<class 'list'> <class 'list'> ['a', 'b', 'x'] [5, 12, 20]

現(xiàn)在我們的第一個(gè)問題解決了,使用sorted函數(shù),將集合按升序排列,并以列表形式體現(xiàn)。如果想降序排列,那么需要將reverse參數(shù)設(shè)置為True,代碼如下:

keys = sorted(x.keys(), reverse=True) values = sorted(x.values(), reverse=True)

2.  排序后,可以獲取成對的key-value嗎?

現(xiàn)在來解決第2個(gè)問題。本文討論的是字典,所以即使對key和value排序,也不是我們期望的,我們期望的是得到字典中的key-value對,而且是已經(jīng)排序好的key-value對。這個(gè)問題也非常好解決,既然已經(jīng)得到了排好序的key,那么就利用key從字典中獲得對應(yīng)的value,這樣就可以組成一對key-value了,代碼如下:

x = {'x':20,'a':12,'b':5} keys = sorted(x.keys()) for key in keys:     print(f"{key}:{x[key]}")

執(zhí)行這段代碼,會輸出如下的內(nèi)容:

x:20 b:5 a:12

很明顯,輸出的key-value對是按key升序排列的。

3.  除了按鍵值排序,可以按值排序嗎?

那值排序是沒問題的,但排好序的值是沒什么用的。因?yàn)樽值洳⒉荒芡ㄟ^value反向獲取key。所以通過前面的方法只能獲取排好序的值。所以需要為sorted函數(shù)的key參數(shù),該參數(shù)用于指定使用key還是value進(jìn)行排序。如果使用的是Python  3.7或以上版本??梢詾閗ey參數(shù)值指定lambda表達(dá)式,代碼如下:

y1 = {k: v for k, v in sorted(x.items(), key=lambda item: item[1])} print(y1) # 按值降序排列 y2 = {k: v for k, v in sorted(x.items(), key=lambda item: item[1], reverse=True)} print(y2)

這段代碼使用了for-in表達(dá)式生成了字典,其中x是待排序的字典。items獲取了key-value對。而lambda表達(dá)式的item就是當(dāng)前的key-value對。item[0]表示key,item[1]表示value,所以使用item[1],就表示按value排序,而使用item[0],就是按key排序。

執(zhí)行這段代碼,會輸出如下的結(jié)果:

{'b': 5, 'a': 12, 'x': 20} {'x': 20, 'a': 12, 'b': 5}

如果不想使用for-in表達(dá)式,也可以使用dict函數(shù),代碼如下:print(dict(sorted(x.items(), key=lambda  item: item[1])))如果不想使用lambda表達(dá)式,或需要更復(fù)雜的排序規(guī)則,可以自定義排序規(guī)則函數(shù),代碼如下:

def dict_val(x):     return x[1]  sorted_x = sorted(x.items(), key=dict_val)

如果讀者用的是3.6或以下版本的Python,可以使用下面的代碼:

import operator # 按value sorted_x = sorted(x.items(), key=operator.itemgetter(1)) print(type(sorted_x))  # list print(sorted_x)  # 所以用列表替代   import operator # 按key sorted_x = sorted(x.items(), key=operator.itemgetter(0)) print(sorted_x)

在這段代碼中,會返回排好序的列表,列表元素是元組形式,第1個(gè)值是key,第2個(gè)值是value。當(dāng)然,你可以將這些數(shù)據(jù)重新插入新的字典中。執(zhí)行這段代碼,會輸出如下內(nèi)容:

[('b', 5), ('a', 12), ('x', 20)] [('a', 12), ('b', 5), ('x', 20)]

如果仍然想通過key搜索字典中的value,可以利用OrderedDict對象將sorted_x轉(zhuǎn)換為有序字典,代碼如下:

import collections sorted_dict = collections.OrderedDict(sorted_x) print(type(sorted_dict)) print(sorted_dict) print(sorted_dict.get('b'))

執(zhí)行這段代碼,會輸出如下內(nèi)容:

<class 'collections.OrderedDict'> OrderedDict([('a', 12), ('b', 5), ('x', 20)]) 5

到此,關(guān)于“如何排序Python字典”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

名稱欄目:如何排序Python字典
分享地址:http://jinyejixie.com/article18/pgggdp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、品牌網(wǎng)站建設(shè)做網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)
逊克县| 连州市| 龙胜| 裕民县| 敦化市| 徐州市| 柘荣县| 绥德县| 岑溪市| 青冈县| 元朗区| 丘北县| 余干县| 游戏| 江川县| 汝州市| 循化| 甘孜县| 太和县| 江川县| 张家港市| 徐汇区| 南溪县| 英吉沙县| 宁陵县| 陕西省| 白沙| 南靖县| 金塔县| 定南县| 临桂县| 安塞县| 西畴县| 万宁市| 双峰县| 平乐县| 徐闻县| 盐城市| 长治县| 大港区| 上思县|