python 字典排序 關於sort()、reversed()、sorted()

來源:互聯網
上載者:User

標籤:

一、Python的排序

1、reversed()

這個很好理解,reversed英文意思就是:adj. 顛倒的;相反的;(判決等)撤銷的

print list(reversed([‘dream‘,‘a‘,‘have‘,‘I‘]))#[‘I‘, ‘have‘, ‘a‘, ‘dream‘]

2、讓人糊塗的sort()與sorted()

在Python 中sorted是內建函數(BIF),而sort()是清單類型的內建函數list.sort()。

sorted()

sorted(iterable[, cmp[, key[, reverse]]])

Return a new sorted list from the items in iterable.

The optional arguments(選擇性參數) cmp, key, and reverse have the same meaning as those for the list.sort() method (described in section Mutable Sequence Types).

cmp specifies(指定) a custom comparison function of two arguments (iterable(可迭代的) elements) which should return a negative(複數), zero or positive(正數) number depending on whether the first argument is considered smaller than, equal to, or larger than the second argument: cmp=lambda x,y: cmp(x.lower(), y.lower()). The default value is None.

key specifies a function of one argument that is used to extract a comparison key from each list element: key=str.lower. The default value is None (compare the elements directly).

reverse is a boolean value. If set to True, then the list elements are sorted as if each comparison were reversed.

#字串排序使用是字典序,而非字母序"""sorted()按照字典序排序"""lis = [‘a‘,‘c‘,‘z‘,‘E‘,‘T‘,‘C‘,‘b‘,‘A‘,‘Good‘,‘Tack‘]print sorted(lis)   #[‘A‘, ‘C‘, ‘E‘, ‘Good‘, ‘T‘, ‘Tack‘, ‘a‘, ‘b‘, ‘c‘, ‘z‘]

 

關於字典序:

可參考百度百科。http://baike.baidu.com/view/4670107.htm

根據ASCII排,具體如下:
0-9(對應數值48-59);
A-Z(對應數值65-90);
a-z(對應數值97-122);

------------
標準序: 短在前,長在後,等長的依次比字母,
如to < up < cap < cat < too < two <boat < boot < card
字典序: 依次比字母,
如boat < boot <cap < card < cat < to < too< two < up

更有甚者說字典序就是字典的排序,像字典一樣。我一直沒有找到權威的說明,什麼是字典序????求答案!!

sort()

s.sort([cmp[, key[, reverse]]])

 

三、Python的字典排序

1、關於Python字典的一些特徵

無序:

字典,形如 dic = {‘a‘:1 , ‘b‘:2 , ‘c‘: 3},字典中的元素沒有順序,所以dic[0]是有語法錯誤的。

無重:

不可以有重複的索引值,所以 dic.add[‘c‘] = 4後,字典變成 {‘a‘:1 , ‘b‘:2 , ‘c‘: 4}.

2、根據“鍵”或“索引值”進行不同順序的排序

函數原型:sorted(dic,value,reverse)

解釋:dic為比較函數,value 為排序的對象(這裡指鍵或索引值),

reverse:註明升序還是降序,True--降序,False--升序(預設)

3、例子:

dic = {‘a‘:31, ‘bc‘:5, ‘c‘:3, ‘asd‘:4, ‘33‘:56, ‘d‘:0}
想把dic的value按照從大到小排序(value都是整數)。

dic = {‘a‘:31, ‘bc‘:5, ‘c‘:3, ‘asd‘:4, ‘33‘:56, ‘d‘:0}print sorted(dic.iteritems(), key=lambda d:d[1], reverse = False )  #[(‘d‘, 0), (‘c‘, 3), (‘asd‘, 4), (‘bc‘, 5), (‘a‘, 31), (‘33‘, 56)]

解釋如下:

(1)、dic.iteritems(),返回字典索引值對的元祖集合

print dic.iteritems()   #<dictionary-itemiterator object at 0x00B71A80>for obj in dic.iteritems():    print obj,obj[0],obj[1]    #(‘a‘, 31) a 31#(‘c‘, 3) c 3#(‘d‘, 0) d 0#(‘bc‘, 5) bc 5#(‘33‘, 56) 33 56#(‘asd‘, 4) asd 4

(2)、關於排序對象

上述已經說過,value(或key)為排序的對象(這裡指鍵或索引值),然而為什麼使用lambda函數呢,這裡請參閱:點擊閱讀

key=lambda d:d[1] 是將索引值(value)作為排序對象。

key = lambda d:d[1]for i in dic.iteritems():    print key(i),   #輸出31 3 0 5 56 4,這些都是字典dic的值

如果選擇 key = lambda d:d[0],則選擇【鍵Key】作為排序對象。

(3)、reverse

reverse 是否反向,reverse=Ture表示反向。

(4)、注意:

sorted(dic.iteritems(), key=lambda d:d[1], reverse = False )將每一項dic.iteritems()索引值對的元祖進行迭代,每一項都作為參數傳入key()函數(我說的是這個:key=lambda d:d[1],)中。

 4、回顧

lis = [‘a‘,‘bc‘,‘c‘,‘asd‘,‘33‘,‘d‘]print sorted(lis)   #[‘33‘, ‘a‘, ‘asd‘, ‘bc‘, ‘c‘, ‘d‘]
依次比字母, 如boat < boot <cap < card < cat < to < too< two < up

5.問題

具體執行個體可參考:[**python的排序函數sort,sorted在列表排序和字典排序中的應用詳解和舉例**](http://wangwei007.blog.51cto.com/68019/1100742)

現在有這種情況,排序中排序。如大題號排序,然後大題對應的小題號也排序,如下:

1234567891011121314151617181920212223 lis = [{‘Big‘:3‘small‘:2},{‘Big‘:3‘small‘:4},{‘Big‘:2‘small‘:2}, {‘Big‘:3‘small‘:1},{‘Big‘:2‘small‘:1},{‘Big‘:1‘small‘:1}] # 大題號排序li = sorted(lis, key=lambda s: s[‘Big‘]) # 輸出:#[{‘small‘: 1, ‘Big‘: 1}, {‘small‘: 2, ‘Big‘: 2}, {‘small‘: 1, ‘Big‘: 2}, {‘small‘: 2, ‘Big‘: 3}, {‘small‘: 4, ‘Big‘: 3}, {‘small‘: 1, ‘Big‘: 3}] # 小題號排序:sort_ff = []no = set([i[‘Big‘for in li])for obj in no:li_ = []for in ff:if i[‘Big‘== obj:li_.append(i)= sorted(li_, key=lambda s: s[‘small‘])for in l:sort_ff.append(j) # 輸出結果:[{‘small‘1‘Big‘1}, {‘small‘1‘Big‘2}, {‘small‘2‘Big‘2}, {‘small‘1‘Big‘3}, {‘small‘2‘Big‘3}, {‘small‘4‘Big‘3}]

 

 

python 字典排序 關於sort()、reversed()、sorted()

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.