python常識系列23-->有序字典


前言

 在人生的道路上,從來沒有全身而退,坐享其成,不勞而獲一說。你不努力,就得出局。

一、背景

最近給學生布置了一道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 )

就解答出這道題啦!感興趣的小伙伴可以試試哈。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM