python_字典集合

python.png

一拖刃、字典基本操作

  • 基本語法:
    dict = {'ob1':'computer', 'ob2':'mouse', 'ob3':'printer'}

  • 技巧:
    字典中包含列表:dict={'yangrong':['23','IT'],"xiaohei":['22','dota']}
    字典中包含字典:dict={'yangrong':{"age":"23","job":"IT"},"xiaohei":{"'age':'22','job':'dota'"}}

  • 增加字典元素
    >>> nameinfo={}
    >>> nameinfo['a1']='yangrong' #若字典里有a1主鍵,則覆蓋原來的值铸董,沒有,則添加
    >>> nameinfo
    {'a1': 'yangrong'}

  • 遍歷字典主鍵與鍵值
    >>> for k, value in nameinfo.items():
    ... print k,value
    ...
    a1 yangrong

  • 查看字典所有主鍵
    >>> dict = {'ob1':'computer','ob2':'mouse', 'ob3':'printer'}
    >>>
    >>>
    >>> dict.keys()
    ['ob2', 'ob3', 'ob1']
    >>> for k in d.keys():
    print dict[k]

  • 判斷字典中是否有該主鍵
    >>> dict.keys()
    ['ob2', 'ob3', 'ob1']
    >>> dict.has_key('ob2') #或'ob2' in dict
    True
    >>> dict.has_key('ob4')
    False

  • 也有人用循環(huán)方法來判斷
    for key in dict.keys():
    但是這種方法畢竟不夠簡潔,
    查看字典所有鍵值內(nèi)容
    >>> dict = {'ob1':'computer','ob2':'mouse', 'ob3':'printer'}
    >>> dict.values()
    ['mouse', 'printer', 'computer']

  • 列出所有項目
    >>> dict.items()
    [('ob2', 'mouse'), ('ob3', 'printer'),('ob1', 'computer')]

  • 清空字典
    >>> dict.clear()
    >>> dict
    {}

  • 拷貝字典
    >>> dict
    {'ob2': 'mouse', 'ob3': 'printer', 'ob1':'computer'}
    >>> a=dict
    >>> a
    {'ob2': 'mouse', 'ob3': 'printer', 'ob1':'computer'}
    >>> b=dict.copy()
    >>> b
    {'ob2': 'mouse', 'ob3': 'printer', 'ob1': 'computer'}

  • 比較字典
    >>> cmp(a,b)
    首先比較主鍵長度线欲,然后比較鍵大小造烁,然后比較鍵值大小否过,(第一個大返回1,小返回-1惭蟋,一樣返回0)

  • 更新字典
    >>>dict={'yangrong':{"age":"23","job":"IT"},"xiaohei":{"'age':'22','job':'dota'"}}
    >>> dict
    {'xiaohei':set(["'age':'22','job':'dota'"]), 'yangrong': {'age': '23', 'job':'IT'}}

    >>> dict['xiaohei']=111        #修改一級字典
    >>> dict
    {'xiaohei': 111, 'yangrong': {'age': '23','job': 'IT'}}
    >>> dict['yangrong']['age']=25    #修改二級字典
    >>> dict
    {'xiaohei': 111, 'yangrong': {'age': 25,'job': 'IT'}}
    
    >>> dict={'yangrong':['23','IT'],"xiaohei":['22','dota']}
    >>>dict['xiaohei'][1]="dota2"         #修改字典中列表某項苗桂,1是代表列表中第2個字符串。
    >>> dict
    {'xiaohei': ['22', 'dota2'], 'yangrong':['23', 'IT']}  
    
  • 刪除字典元素
    >>> dict
    {'xiaohei': ['22', 'dota2'], 'yangrong':['23', 'IT']}
    >>> del dict['xiaohei'] #刪除xiaohei鍵值
    >>> dict
    {'yangrong': ['23', 'IT']}

    >>> dict
    {'yangrong': ['23', 'IT']}
    >>>
    >>> del dict['yangrong'][1]    #刪除yangrong主鍵的每2字值
    >>> dict
    {'yangrong': ['23']}
    
  • 刪除整個字典
    >>> dict
    {'yangrong': ['23']}
    >>> dict.clear() #同del dict
    >>> dict
    {}

  • 將字符串切分為列表
    >>> s="hello world bye"
    >>> s.split() #用于把有規(guī)律的文本告组,讀取出來后煤伟,使用列表進行修改,再寫入文件木缝。
    ['hello', 'world', 'bye']

  • 將列表轉換為字符串
    S.split(str, ' ') #將string轉list便锨,以空格切分

  • 存儲字典(pickle序列化)
    #需導入pickle模塊
    import pickle

  • 把字典內(nèi)容存入文件
    f=file('data.txt','wb') #新建文件data.txt,'wb'我碟,b是打開塊文件鸿秆,對于設備文件有用
    pickle.dump(a,f) #把a序列化存入文件
    f.close()

  • 把內(nèi)容讀入字典(反序列化)
    a=open('data.txt','rb') #打開文件
    print pickle.load(a) #把內(nèi)容全部反序列化

  • 合并2個字典
    dict1={1:[1,11,111],2:[2,22,222]}
    dict2={3:[3,33,333],4:[4,44,444]}
    合并兩個字典得到類似

    {1:[1,11,111],2:[2,22,222],3:[3,33,333],4:[4,44,444]}
    

方法1:

  dictMerged1=dict(dict1.items()+dict2.items())

方法2:

    dictMerged2=dict(dict1, **dict2)

方法2等同于:

    dictMerged=dict1.copy()
    dictMerged.update(dict2)

或者

  dictMerged=dict(dict1)
  dictMerged.update(dict2)

方法2比方法1速度快很多

  • 總結:字典內(nèi)置函數(shù)&方法

    Python字典包含了以下內(nèi)置函數(shù):

    1、cmp(dict1, dict2):比較兩個字典元素怎囚。
    2卿叽、len(dict):計算字典元素個數(shù),即鍵的總數(shù)恳守。
    3考婴、str(dict):輸出字典可打印的字符串表示。
    4催烘、type(variable):返回輸入的變量類型沥阱,如果變量是字典就返回字典類型。

Python字典包含了以下內(nèi)置方法:

1伊群、radiansdict.clear():刪除字典內(nèi)所有元素
2考杉、radiansdict.copy():返回一個字典的淺復制
3策精、radiansdict.fromkeys():創(chuàng)建一個新字典,以序列seq中元素做字典的鍵崇棠,val為字典所有鍵對應的初始值
4咽袜、radiansdict.get(key, default=None):返回指定鍵的值,如果值不在字典中返回default值
5枕稀、radiansdict.has_key(key):如果鍵在字典dict里返回true询刹,否則返回false
6、radiansdict.items():以列表返回可遍歷的(鍵, 值) 元組數(shù)組
7萎坷、radiansdict.keys():以列表返回一個字典所有的鍵
8凹联、radiansdict.setdefault(key, default=None):和get()類似, 但如果鍵不已經(jīng)存在于字典中,將會添加鍵并將值設為default
9哆档、radiansdict.update(dict2):把字典dict2的鍵/值對更新到dict里
10蔽挠、radiansdict.values():以列表返回字典中的所有值

二、字典的特性

  • 字典值可以沒有限制地取任何python對象瓜浸,既可以是標準的對象象泵,也可以是用戶定義的,但鍵不行斟叼。兩個重要的點需要記着蓟荨:
    1)不允許同一個鍵出現(xiàn)兩次。創(chuàng)建時如果同一個鍵被賦值兩次朗涩,后一個值會被記住忽孽,如下實例:
    dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'}
    print "dict['Name']: ", dict['Name']
    #以上實例輸出結果:
    #dict['Name']: Manni
    2)鍵必須不可變,可以用數(shù)谢床,字符串或元組充當兄一,但是用列表不行,如下實例:
    dict = {['Name']: 'Zara', 'Age': 7}
    print "dict['Name']: ", dict['Name']
    #以上實例輸出結果:
    #Traceback (most recent call last):
    # File "test.py", line 3, in <module>
    #dict = {['Name']: 'Zara', 'Age': 7};
    #TypeError: list objects are unhashable
    3)Dictionary中的key值是大小寫敏感的识腿。并且出革,Dictionary中沒有元素順序的概念。

三渡讼、字典與JSON互轉

  • 實際上JSON就是Python字典的字符串表示骂束,但是字典作為一個復雜對象是無法直接轉換成定義它的代碼的字符串(不能傳遞所以需要先將其轉換成字符串),Python有一個叫simplejson的庫(就叫 json )可以方便的完成JSON的生成和解析成箫,這個包已經(jīng)包含在Python2.6中展箱, 主要包含四個方法:
  • dump和dumps(從Python生成JSON)
    • 區(qū)別:dump和dumps的唯一區(qū)別是dump會生成一個類文件對象,dumps會生成字符串
轉換對照表.png
  • load和loads(解析JSON成Python的數(shù)據(jù)類型)
    • 區(qū)別:load和loads分別解析類文件對象和字符串格式的JSON
轉換對照表.png
  • json.dumps()方法提供了很多好用的參數(shù)可供選擇蹬昌,比較常用的有sort_keys混驰,separators,indent等參數(shù)。

  • sort_keys:對dict對象進行排序栖榨,我們知道默認dict是無序存放的
    data1 = {'b':789,'c':456,'a':123}
    data2 = {'a':123,'b':789,'c':456}
    d1 = json.dumps(data1, sort_keys=True)
    d2 = json.dumps(data2)
    d3 = json.dumps(data2, sort_keys=True)
    print d1
    print d2
    print d3
    print d1==d2
    print d1==d3
    輸出:
    {"a": 123, "b": 789, "c": 456}
    {"a": 123, "c": 456, "b": 789}
    {"a": 123, "b": 789, "c": 456}
    False
    True

  • separators:對數(shù)據(jù)進行壓縮,該參數(shù)傳遞是一個元組昆汹,包含分割對象的字符串。
    print 'DATA:', repr(data)
    print 'repr(data) :', len(repr(data))
    print 'dumps(data) :', len(json.dumps(data))
    print 'dumps(data, indent=2) :', len(json.dumps(data, indent=4))
    print 'dumps(data, separators):', len(json.dumps(data, separators=(',',':')))
    輸出:
    DATA: {'a': 123, 'c': 456, 'b': 789}
    repr(data) : 30
    dumps(data) : 30
    dumps(data, indent=2) : 46
    dumps(data, separators): 25

  • indent:是縮進的意思婴栽,它可以使得數(shù)據(jù)存儲的格式變得更加優(yōu)雅满粗。
    data1 = {'b':789,'c':456,'a':123}
    d1 = json.dumps(data1,sort_keys=True,indent=4)
    print d1
    輸出:
    {
    "a": 123,
    "b": 789,
    "c": 456
    }

  • skipkeys:dumps方法存儲dict對象時,key必須是str類型居夹,如果出現(xiàn)了其他類型的話焦匈,那么會產(chǎn)生TypeError異常既穆,如果開啟該參數(shù),設為True的話捐顷,則會比較優(yōu)雅的過度檬洞。
    data = {'b':789,'c':456,(1,2):123}
    print json.dumps(data,skipkeys=True)
    輸出:

      {"c": 456, "b": 789}
    

附錄:字典常用方法

方法名 說明
len(a) 得到字典a中元素的個數(shù)
a[k] 取得字典a中鍵K所對應的值
a[k] = v 設定字典a中鍵k所對應的值成為v
del a[k] 使用 key從一個 dictionary中刪除獨立的元素狸膏。如,刪除Dictionary dic中的user=’root’:del dic[“user”]
a.clear() 從一個 dictionary中清除所有元素添怔。如湾戳,刪除Dictionary dic中的所有元素:dic.clear()
a.copy() 得到字典副本
k in a 字典中存在鍵k則為返回True,沒有則返回False
k not in a 字典中不存在鍵k則為返回true,反之返回False
a.has_key(k) 判斷字典a中是否含有鍵k
a.items() 得到字典a中的鍵—值對list
a.keys() 得到字典a中鍵的list
a.update([b]) 從b字典中更新a字典广料,如果鍵相同則更新砾脑,a中不存在則追加.
a.fromkeys(seq[, value]) 創(chuàng)建一個新的字典,其中的鍵來自sql艾杏,值來自value
a.values() 得到字典a中值的list
a.get(k[, x]) 從字典a中取出鍵為k的值韧衣,如果沒有,則返回x
a.setdefault(k[, x]) 將鍵為k的值設為默認值x购桑。如果字典a中存在k,則返回k的值畅铭,如果不存在,向字典中添加k-x鍵值對勃蜘,并返回值x
a.pop(k[, x]) 取出字典a中鍵k的值硕噩,并將其從字典a中刪除,如果字典a中沒有鍵k缭贡,則返回值x
a.popitem() 取出字典a中鍵值對炉擅,并將其從字典a中刪除
a.iteritems() 返回字典a所有鍵-值對的迭代器。
a.iterkeys() 返回字典a所有鍵的迭代器阳惹。
a.itervalues() 返回字典a所有值的迭代器坑资。

@晴天-2016-08-25 17:40:56 -updat

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市穆端,隨后出現(xiàn)的幾起案子袱贮,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件攒巍,死亡現(xiàn)場離奇詭異嗽仪,居然都是意外死亡,警方通過查閱死者的電腦和手機柒莉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門闻坚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人兢孝,你說我怎么就攤上這事窿凤。” “怎么了跨蟹?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵雳殊,是天一觀的道長。 經(jīng)常有香客問我窗轩,道長夯秃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任痢艺,我火速辦了婚禮仓洼,結果婚禮上,老公的妹妹穿的比我還像新娘堤舒。我一直安慰自己色建,他們只是感情好,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布舌缤。 她就那樣靜靜地躺著镀岛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪友驮。 梳的紋絲不亂的頭發(fā)上漂羊,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音卸留,去河邊找鬼走越。 笑死,一個胖子當著我的面吹牛耻瑟,可吹牛的內(nèi)容都是我干的旨指。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼喳整,長吁一口氣:“原來是場噩夢啊……” “哼谆构!你這毒婦竟也來了?” 一聲冷哼從身側響起框都,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤搬素,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體熬尺,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡摸屠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了粱哼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片季二。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖揭措,靈堂內(nèi)的尸體忽然破棺而出胯舷,到底是詐尸還是另有隱情,我是刑警寧澤绊含,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布桑嘶,位于F島的核電站,受9級特大地震影響艺挪,放射性物質發(fā)生泄漏不翩。R本人自食惡果不足惜兵扬,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一麻裳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧器钟,春花似錦津坑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至昙啄,卻和暖如春穆役,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背梳凛。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工耿币, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人韧拒。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓淹接,卻偏偏與公主長得像,于是被迫代替她去往敵國和親叛溢。 傳聞我的和親對象是個殘疾皇子塑悼,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容