<dl id="orng6"><samp id="orng6"><listing id="orng6"></listing></samp></dl><big id="orng6"><dl id="orng6"></dl></big>
<big id="orng6"></big>
<legend id="orng6"></legend>
<samp id="orng6"><em id="orng6"></em></samp>
朋友圈

400-850-8622

全國(guó)統(tǒng)一學(xué)習(xí)專線 9:00-21:00

位置:北京辦公軟件培訓(xùn)資訊 > 北京excel培訓(xùn)資訊 > 總算清楚python如何對(duì)字典排序

總算清楚python如何對(duì)字典排序

日期:2019-08-25 12:21:24     瀏覽:899    來(lái)源:天才領(lǐng)路者
核心提示:在程序中使用字典進(jìn)行數(shù)據(jù)信息統(tǒng)計(jì)時(shí),由于字典是無(wú)序的所以打印字典時(shí)內(nèi)容也是無(wú)序的。因此,為了使統(tǒng)計(jì)得到的結(jié)果更方便查看需要進(jìn)行排序。
在程序中使用字典進(jìn)行數(shù)據(jù)信息統(tǒng)計(jì)時(shí),由于字典是無(wú)序的所以打印字典時(shí)內(nèi)容也是無(wú)序的。因此,為了使統(tǒng)計(jì)得到的結(jié)果更方便查看需要進(jìn)行排序。Python中字典的排序分為按“鍵”排序和按“值”排序。那么python如何對(duì)字典排序呢?一起來(lái)了解下吧: ? python如何對(duì)字典排序 ?

python如何對(duì)字典排序

? 實(shí)際應(yīng)用中我們確實(shí)有這種排序的“需求”-----按照values的值“排序”輸出,或者按照別的奇怪的順序進(jìn)行輸出,我們只需要把字典轉(zhuǎn)化成list或者tuple,把字典每一對(duì)鍵值轉(zhuǎn)化為list中的兩位子list或者子tuple再輸出,就可以達(dá)到我們的目的: ? 舉例如下: ? x={2:1,3:4,4:2,1:5,5:3} ? import operator ? sorted_x=sorted(x.items(),key=operator.itemgetter(0))#按照item中的*個(gè)字符進(jìn)行排序,即按照key排序 ? print x ? print sorted_x ? print dict(sorted_x) ? 輸出結(jié)果為: ? {1: 5, 2: 1, 3: 4, 4: 2, 5: 3} ? [(1, 5), (2, 1), (3, 4), (4, 2), (5, 3)] ? {1: 5, 2: 1, 3: 4, 4: 2, 5: 3} ? 字典始終都按照key從小到大排序,與定義過(guò)程無(wú)關(guān),轉(zhuǎn)化為list嵌套tuple這里也依然按著key排序 ? x={2:1,3:4,4:2,1:5,5:3} ? import operator ? sorted_x=sorted(x.items(),key=operator.itemgetter(1))#這里改為按照item的第二個(gè)字符排序,即value排序 ? print x ? print sorted_x ? print dict(sorted_x) ? 輸出結(jié)果為: ? {1: 5, 2: 1, 3: 4, 4: 2, 5: 3} ? [(2, 1), (4, 2), (5, 3), (3, 4), (1, 5)] ? {1: 5, 2: 1, 3: 4, 4: 2, 5: 3} ? 字典的順序依舊不變,但轉(zhuǎn)化為list嵌套tuple格式之后,完成了按照value排序的操作。 ? python中字典按鍵或鍵值如何排序 ? 按“值”排序 ? 按“值”排序就是根據(jù)字典的值進(jìn)行排序,可以使用內(nèi)置的sorted()函數(shù)。 ? ?sorted(iterable[, cmp[, key[, reverse]]]) ? iterable:是可迭代類型類型; ? cmp:用于比較的函數(shù),比較什么由key決定,有默認(rèn)值,迭代集合中的一項(xiàng); ? key:用列表元素的某個(gè)屬性和函數(shù)進(jìn)行作為關(guān)鍵字,有默認(rèn)值,迭代集合中的一項(xiàng); ? reverse:排序規(guī)則. reverse = True 或者 reverse = False,有默認(rèn)值,默認(rèn)為升序排列(False)。 ? 返回值:是一個(gè)經(jīng)過(guò)排序的可迭代類型,與iterable一樣。一般來(lái)說(shuō),cmp和key可以使用lambda表達(dá)式。 ? 如果對(duì)字典進(jìn)行排序,常用的形式如下: ? sorted(dict.items(), key=lambda e:e[1], reverse=True) ? 其中,e表示dict.items()中的一個(gè)元素,e[0]表示按鍵排序,e[1]則表示按值排序。reverse=False可以省略,默認(rèn)為升序排列。 ? 說(shuō)明:字典的items()函數(shù)返回的是一個(gè)列表,列表的每個(gè)元素是一個(gè)鍵和值組成的元組。因此,sorted(dict.items(), key=lambda e:e[1], reverse=True)返回的值同樣是由元組組成的列表。 ? 例: ? x=[4,6,2,1,7,9,4] ? y=x[:] ? y.sort() ? print x ? print y ? 輸出結(jié)果如下: ? [4, 6, 2, 1, 7, 9, 4] ? [1, 2, 4, 4, 6, 7, 9] ? 說(shuō)明:調(diào)用x[:]得到的是包含了x所有元素的分片,這是一種很有效率的復(fù)制整個(gè)列表的方法。通過(guò)y=x簡(jiǎn)單的將x復(fù)制給y是沒(méi)有用的,因?yàn)檫@樣做就讓x和y都指向了同一個(gè)列表了。 ? 按“鍵”排序 ? 對(duì)字典進(jìn)行按鍵排序也可以使用上面的sorted函數(shù),只要改為sorted(dict.items(), key=lambda e:e[0], reverse=True)就可以了。不過(guò)除了這個(gè)方式之外,還有另外的方法:通過(guò)列表的排序來(lái)達(dá)到使字典有序的目的。 ? 用到的知識(shí):字典的keys()函數(shù)返回列表形式的鍵值,將該列表排序即可。列表的排序使用列表的sort()函數(shù),詳細(xì)內(nèi)容參考列表排序。 ? 總結(jié):? ? 方法1:最簡(jiǎn)單的方法,排列元素(key/value對(duì)),然后挑出值。字典的items方法,會(huì)返回一個(gè)元組的列表,其中每個(gè)元組都包含一對(duì)項(xiàng)目 ——鍵與對(duì)應(yīng)的值。此時(shí)排序可以sort()方法。 ? def sortedDictValues1(adict): ? items = adict.items() ? items.sort() ? return [value? for key, value? in items] ? 方法2:使用排列鍵(key)的方式,挑出值,速度比方法1快。字典對(duì)象的keys()方法返回字典中所有鍵值組成的列表,次序是隨機(jī)的。需要排序時(shí)只要對(duì)返回的鍵值列表使用sort()方法。 ? def sortedDictValues1(adict): ? keys = adict.keys() ? keys.sort() ? return [adict[key]? for key? in keys] ? 方法3:通過(guò)映射的方法去更有效的執(zhí)行*一步 ? def sortedDictValues1(adict): ? keys = adict.keys() ? keys.sort() ? return map (adict.get,keys ) ? 方法4:對(duì)字典按鍵排序,用元組列表的形式返回,同時(shí)使用lambda函數(shù)來(lái)進(jìn)行; ? ?sorted(iterable[, cmp[, key[, reverse]]] ? cmp和key一般使用lambda ? 例: ? >>> d={"ok":1,"no":2}? #對(duì)字典按鍵排序,用元組列表的形式返回 ? >>> sorted(d.items(), key=lambda d:d[0]) ? [('no', 2), ('ok', 1)]? #對(duì)字典按值排序,用元組列表的形式返回 ? >>> sorted(d.items(), key=lambda d:d[1]) ? [('ok', 1), ('no', 2)] ? python數(shù)組或字典變量如何排序 ? ?數(shù)據(jù)處理中需要對(duì)數(shù)組按行或按列進(jìn)行排序,或者對(duì)字典變量中的鍵值對(duì)排序。主要用到的兩個(gè)函數(shù)為np.lexsort()和內(nèi)置函數(shù)sorted()。如下說(shuō)明處理過(guò)程。 ? 對(duì)數(shù)組按*一行排序,且保持列的相對(duì)位置不變 ? ? >>> import numpy as np ? >>> data=np.array([[ 2,? 7,? 1,? 2],[35,? 9,? 1,? 2],[22, 4,? 4,? 2]]) ? >>> data ? array([[ 2,? 7,? 1,? 2], ? ? ? ? ?[35,? 9,? 1,? 2], ? ? ? ? ?[22,? 4,? 4,? 2]]) ? >>> idx=np.lexsort(data)#參數(shù)為二維數(shù)組時(shí),按照*一行升序,*一行的值相同時(shí)按照倒數(shù)第二行升序 ? >>> idx ? array([3, 2, 1, 0]) ? >>> data[:, idx] ? array([[ 2,? 1,? 7,? 2], ? ? ? ? ?[ 2,? 1,? 9, 35], ? ? ? ? ?[ 2,? 4,? 4, 22]]) ? 對(duì)數(shù)組按*列排序,且保持行的相對(duì)位置不變 ? >>> import numpy as np ? >>> data=np.array([[ 2,? 7,? 1,? 2],[35,? 9,? 1,? 2],[22, 4,? 4,? 2]])?? ? >>> data ? array([[ 2,? 7,? 1,? 2], ? ? ? ? ?[35,? 9,? 1,? 2], ? ? ? ? ?[22,? 4,? 4,? 2]])? ? >>> data_T=data[:,::-1].T #通過(guò)將列逆序,并求矩陣的轉(zhuǎn)置,從而將*列變?yōu)?一行 ? >>> data_T ? array([[ 2,? 2,? 2], ? ? ? ? ?[ 1,? 1,? 4], ? ? ? ? ?[ 7,? 9,? 4], ? ? ? ? ?[ 2, 35, 22]]) ? >>> idx=np.lexsort(data_T) ? >>> idx ? array([0, 2, 1]) ? >>> data[idx] ? array([[ 2,? 7,? 1,? 2], ? ? ? ? ?[22,? 4,? 4,? 2], ? ? ? ? ?[35,? 9,? 1,? 2]]) ? 按照字典變量的鍵或值進(jìn)行排序 ? >>> data={3:5, 2:1, 5:4, 8:4, 4:9} ? >>> data ? {8: 4, 2: 1, 3: 5, 4: 9, 5: 4} ? >>> data_key=sorted(data.items(), key=lambda e:e[0], reverse=False) #按字典的鍵進(jìn)行升序 ? >>> data_key ? [(2, 1), (3, 5), (4, 9), (5, 4), (8, 4)] ? >>> data_key=sorted(data.items(), key=lambda e:e[0], reverse=True)#按字典的鍵進(jìn)行降序 ? >>> data_key ? [(8, 4), (5, 4), (4, 9), (3, 5), (2, 1)] ? >>> data_val=sorted(data.items(), key=lambda e:e[1], reverse=False)#按字典的值進(jìn)行升序 ? >>> data_val ? [(2, 1), (8, 4), (5, 4), (3, 5), (4, 9)] ? Python排序字典的方法 ? Python排序可以通過(guò)內(nèi)建函數(shù)sorted()實(shí)現(xiàn),同時(shí)部分擁有sort()方法的數(shù)據(jù)類型也可以通過(guò)sort實(shí)現(xiàn),由于字典沒(méi)有sort方法,所以用sorted實(shí)現(xiàn) ? 通過(guò)key值排序 ? d = {'a': 2, 'A': 1, 1: 3, 'b': 2} ? sorted_key_list = sorted(d) ? print(sorted_key_list) ? sorted_dict = map(lambda x:{x:d[x]}, sorted_key_list) ? print(sorted_dict) ? 結(jié)果如下: ? [1, 'A', 'a', 'b'] #根據(jù)ascii碼大小排序 ? [{1: 3}, {'A': 1}, {'a': 2}, {'b': 2}] ? 結(jié)論: ? sorted函數(shù)會(huì)產(chǎn)生一個(gè)新的列表,而sort方法則會(huì)改變?cè)璱terable對(duì)象 ? 通過(guò)value排序 ? d = {'a': 2, 'A': 1, 1: 3, 'b': 2} ? sorted_key_list = sorted(d, key=lambda x:d[x]) ? # sorted_key_list = sorted(d, key=lambda x:d[x], reverse=True)? ?倒序排列 ? print(sorted_key_list) ? sorted_dict = map(lambda x:{x:d[x]}, sorted_key_list) ? print(sorted_dict) ? 結(jié)果如下: ? ['A', 'a', 'b', 1] ? [{'A': 1}, {'a': 2}, {'b': 2}, {1: 3}] ? 結(jié)論: ? key是排序的索引,是一種規(guī)則,對(duì)于字典來(lái)說(shuō),排序的對(duì)象始終是鍵構(gòu)成的列表,這里的規(guī)則為 lambda x:d[x], 即以字典的值為索引排序 ? reverse意為翻轉(zhuǎn),默認(rèn)此參數(shù)為False不翻轉(zhuǎn),即reverse=False,那就是正序*字符ascii(其他語(yǔ)言按*unicode編碼大小排序,中文無(wú)意義啊貌似)由小到大排序,改為True即可由大到小排序了。 ?
如果本頁(yè)不是您要找的課程,您也可以百度查找一下: