前言
在人生的道路上,從來沒有全身而退,坐享其成,不勞而獲一說。你不努力,就得出局。
一、背景
最近給學生布置了一道python編程題,題目是這樣的:給定一個非空正整數的數組,按照數組內數字重復出現次數,從高到低排序,如:[1,1,2,2,3,1,0,0,3,19] 結果為 [1,2,3,0,19] 。發現做的過程中到最后不太好做,就用到了有序字典。
二、有序字典介紹
有序字典:顧名思義,就是有順序的字典,但大家都知道,字典是無序的。
其實python里面有個小知識:python 2.* 系列版本有序字典寫法如下:
import collections
# 創建一個有序字典
datas = collections.OrderedDict()
python 3.6以后的版本中,大家創建python字典后,就默認是有序的(原因可參考其它博客)
三、問題解決
給學生布置那一道題目之后,我就當場給學生寫,寫法如下:
list_a = [1,1,2,2,3,1,0,0,3,19]
print( set(list_a) ) # 去重
dict_a = {}
for i in set(list_a):
print( " %d - count:%d "%(i,list_a.count(i)) )
dict_a[i] = list_a.count(i) # 字典增加元素
print( dict_a )
寫到如上步驟的時候,我能得出結果:{0: 2, 1: 3, 2: 2, 3: 2, 19: 1} ,可以知道每個不同元素出現的次數,但無法后續用元素數量排序元素了。
然后就使用python2.*的有序字典語法,寫法如下:
import collections
list_a = [1,1,2,2,3,1,0,0,3,19]
datas = collections.OrderedDict() # 創建有序字典
for i in set(list_a):
print( " %d - count:%d "%(i,list_a.count(i)) )
datas[i] = list_a.count(i) # 字典增加元素
# 以字典的value進行排序語法
e1 = collections.OrderedDict( (sorted(datas.items(), key = lambda asd:asd[1])) )
print( e1 )
e2 = list( e1 )
e2.reverse()
print( e2 )
就解答出這道題啦!感興趣的小伙伴可以試試哈。
