2020-09-24

Python字典里的5個黑魔法

原創(chuàng)?xinxin?菜鳥學(xué)Python?

閱讀本文大概需要5.8 分鐘

Python里面有3大數(shù)據(jù)結(jié)構(gòu):列表,字典和集合.字典是常用的數(shù)據(jù)結(jié)構(gòu),里面有一些重要的技巧用法,我把這些都整理到一起,熟練掌握這些技巧之后拖陆,對自己的功力大有幫助.

1.字典的排序:

用萬金油sorted()函數(shù)

舉一個簡單的例子

? ?my_dict={"cc":100,"aa":200,"bb":10}

print(sorted(my_dict.iteritems(),key=lambda x:x[0]))#表示按照key排序

>>>[('aa', 200), ('bb', 10), ('cc', 100)]

print(sorted(my_dict.iteritems(),key=lambda x:x[1]))#表示按照value排序

>>>[('bb', 10), ('cc', 100), ('aa', 200)]

注意原始的my_dict本身順序并沒有變(不信你可以print看看),排序是通過sorted()返回了一個新的字典

另外一種做法,因為字典是無序,若你一開始設(shè)計的時候就希望這個數(shù)據(jù)結(jié)構(gòu),按照的添加的順序進行有序排列(比如讀取CSV文件)栗涂,那么我們就是利用collection模塊里面的OrderedDict()處理:

from collections import OrderedDict

orderDict=OrderedDict()

orderDict['a']=1

orderDict['b']=2

orderDict['c']=3

print(orderDict)

>>>OrderedDict([('a', 1), ('b', 2), ('c', 3)])

對比一下,若是普通的dict是亂序的祈争,若不用OrderedDict()

orderDict=dict()

orderDict['a']=1

orderDict['b']=2

orderDict['c']=3

print(orderDict)

>>>{'a': 1, 'c': 3, 'b': 2}

最后要提醒一下:OrderedDict()雖然是好東西斤程,但是它內(nèi)部維護了一個雙向鏈表,若數(shù)據(jù)量很大的話,會非常消耗內(nèi)存.

2.字典的取值

字典中取值大家很容易想到用dict[key],這個有什么難的菩混,確實一般取值是這樣的,但是你有沒有想過若你取的值不存在忿墅,就會發(fā)生異常,風(fēng)險很大.(良好的代碼,一定是要考慮健壯性,切記)

因為試圖通過索引的方式去取值,比如dict[key],當(dāng)key不是字典dict的鍵沮峡,會引起異常疚脐,有沒有什么兩全的辦法有值的時候取值,沒有值的時候即使我取不到也不會發(fā)生異常

答案是有的邢疙,python早就給你準(zhǔn)備好了.我們用dict.get()

建議:盡量用dict.get()來代替dict[key]

3.字典中提取部分子集

我們原來有一個長的字典棍弄,我們想提取其中一部分變成另外一個子集,我們怎么做呢,我們來看一個小例子:

students_score={'jack':80,'james':91,'leo':100,'sam':60}

#提取分數(shù)超過90分的學(xué)生信息疟游,并變成字典

我們可以用字典推導(dǎo)式呼畸,輕松搞定

good_score={name:score for name,score in students_score.items() if score>90}

print(good_score)

>>>{'james': 91, 'leo': 100}

4.字典的計算

比如我們有一個字典是記錄股票的價格呢,一般key都是股票的名字,而value是價格颁虐,若我們想對價格進行計算役耕,應(yīng)該如何處理呢,我們還是通過實例來講解:

下面是一個股票價格的字典,我們希望得到里面的最大值聪廉,最小值

stocks={'wanke':25.6,'wuliangye':32.3,'maotai':299.5,'huatai':18.6}

一般有幾種方法:

利用字典的values():

利用神奇的zip()進行翻轉(zhuǎn)(zip詳細用法我前面的文章里面經(jīng)過瞬痘,可以從歷史文章里面找一下)

是不是對python的用法嘆為觀止故慈,太神奇了,內(nèi)置了這么多方便的用法框全,若用c++,java處理這些問題要好幾倍的代碼.

5.字典的翻轉(zhuǎn)

在處理復(fù)雜的數(shù)據(jù)結(jié)構(gòu)的時候察绷,有的時候希望把字典翻轉(zhuǎn),一般用推導(dǎo)列表進行過渡,然后再用dict()函數(shù)編程字典

若碰到比較大的字典津辩,數(shù)據(jù)量很多很長的時候拆撼,最好用Python標(biāo)準(zhǔn)庫里的itertools模塊(順便說一下,這個模塊非常有用,大家可以關(guān)注一下)

from itertools import izip

invert_stocks2=dict(izip(stocks.itervalues(),stocks.iterkeys()))

print(invert_stocks2)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末喘沿,一起剝皮案震驚了整個濱河市闸度,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蚜印,老刑警劉巖莺禁,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異窄赋,居然都是意外死亡哟冬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門忆绰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浩峡,“玉大人,你說我怎么就攤上這事错敢『苍郑” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵稚茅,是天一觀的道長纸淮。 經(jīng)常有香客問我,道長峰锁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任双戳,我火速辦了婚禮虹蒋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘飒货。我一直安慰自己魄衅,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布塘辅。 她就那樣靜靜地躺著晃虫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪扣墩。 梳的紋絲不亂的頭發(fā)上哲银,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天扛吞,我揣著相機與錄音,去河邊找鬼荆责。 笑死滥比,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的做院。 我是一名探鬼主播盲泛,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼键耕!你這毒婦竟也來了寺滚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤屈雄,失蹤者是張志新(化名)和其女友劉穎村视,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棚亩,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡蓖议,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了讥蟆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勒虾。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖瘸彤,靈堂內(nèi)的尸體忽然破棺而出修然,到底是詐尸還是另有隱情,我是刑警寧澤质况,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布愕宋,位于F島的核電站,受9級特大地震影響结榄,放射性物質(zhì)發(fā)生泄漏中贝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一臼朗、第九天 我趴在偏房一處隱蔽的房頂上張望邻寿。 院中可真熱鬧,春花似錦视哑、人聲如沸绣否。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蒜撮。三九已至,卻和暖如春跪呈,著一層夾襖步出監(jiān)牢的瞬間段磨,已是汗流浹背取逾。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留薇溃,地道東北人菌赖。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像沐序,于是被迫代替她去往敵國和親琉用。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361