python字典按順序
『壹』 python怎麼對字典進行排序
python 字典(dict)的特點就是無序的,按照鍵(key)來提取相應值(value),如果我們需要字典按值排序的話,那可以用下面的方法來進行:
1 下面的是按照value的值從大到小的順序來排序。
dic = {'a':31, 'bc':5, 'c':3, 'asd':4, 'aa':74, 'd':0}
dict= sorted(dic.iteritems(), key=lambda d:d[1], reverse = True)
print dict
輸出的結果:
[('aa', 74), ('a', 31), ('bc', 5), ('asd', 4), ('c', 3), ('d', 0)]
下面我們分解下代碼
print dic.iteritems() 得到[(鍵,值)]的列表。
然後用sorted方法,通過key這個參數,指定排序是按照value,也就是第一個元素d[1的值來排序。reverse = True表示是需要翻轉的,默認是從小到大,翻轉的話,那就是從大到小。
2 對字典按鍵(key)排序:
dic = {'a':31, 'bc':5, 'c':3, 'asd':4, 'aa':74, 'd':0}
dict= sorted(dic.iteritems(), key=lambda d:d[0]) d[0]表示字典的鍵
print dict
『貳』 Python中給字典排序的三種方法(有一種你絕對沒見過)
在計算機等級考試中,詞頻排序問題經常出現。通常,我們首先通過生成字典的方法統計詞的頻次,接著對字典進行排序。那麼,如何快速對字典按照鍵值進行排序呢?以下是三種方法。
以以下列表dic={'a':4, 'b': 3, 'c': 2, 'd': 1}為例,如何實現字典的升序排列呢?
第一種方法:使用自定義函數lambda
通過dic.items()獲取由字典鍵名和鍵值組成的元組列表,然後通過自定義函數獲取元組的第2個元素,作為排序的依據即key。默認是按照升序排列,如果需要降序排列,可以把reverse設為True。
第二種方法:使用operator的方法
operator. itemgetter(item)和operator. itemgetter(*items)的功能是返回一個可調用對象,該對象可以使用操作__getitem__()方法從自身的操作中捕獲item。如果制定了多個items,返回一個由查詢值組成的元組。例如:運行f = itemgetter(2),然後調用f(r),返回r[2]。這里通過operator獲得了dic.items()中的鍵值。注意operator是內置的包,無需安裝。
第三種方法:使用列表推導式法
使用列表推導式,交換元組中元素的位置,排序後再交換回來。這種方法有點兒麻煩,但邏輯清楚,適合新手。歡迎大家一起交流,提出更多好的方法。
『叄』 python字典是否有序
默認情況下Python的字典輸出順序是按照鍵的創建順序。
字典的無序是指,不能人為重新排序。
比如說你按鍵值1,2,3,4的順序創建的字典,只能由解析器按創建順序,還是1,2,3,4的輸出。
你無法控制它按照4,3,2,1的順序輸出,你也無法做到1,3,2,4的順序。
而且這個輸出順序是也不是能真正按照創建順序可以控的。
這裡面有兩個影響因素:
(1)鍵值的哈希碰撞,hash(key1) == hash(key2)時,向字典里連續添加的這個兩個鍵的順序是不可以控制的,也是無法做到連續的,後來的鍵會按演算法調整到其它位置。
(2)字典空間擴容,當鍵的數量超過字典默認開的空間時,字典會做空間擴容,擴容後的鍵順和創建順序就會發生變化,不受人為控制。
『肆』 python字典中根據值的大小,按順序排列鍵有什麼方法
s={"a":"bb","b":"cc","c":"aa"}
deffun(s):
d=sorted(s.iteritems(),key=lambdat:t[1],reverse=False)
returnd
d=fun(s)
printd
iteritems()得到的[(鍵,值)]的列表,通過sorted方法,指定排序的鍵值key是原來字典中的value屬性,其中用到了匿名函數lambda,參數為t列表,返回第二個元素t[1],也就是每個鍵值對中的value,從小到大排序時reverse=False,從大到小排序是True!