Python 字典(Dictionary)操作詳解

Python字典是另一種可變?nèi)萜髂P停铱纱鎯θ我忸愋蛯ο蟊靡蓿缱址弧?shù)字、元組等其他容器模型腐巢。

一品追、創(chuàng)建字典

字典由鍵和對應(yīng)值成對組成。字典也被稱作關(guān)聯(lián)數(shù)組或哈希表冯丙∪馔撸基本語法如下:

dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}

也可如此創(chuàng)建字典

dict1 = { 'abc': 456 }
dict2 = { 'abc': 123, 98.6: 37 }

注意:
1.每個鍵與值用冒號隔開(:),每對用逗號胃惜,每對用逗號分割泞莉,整體放在花括號中({})。
2.鍵必須獨(dú)一無二船殉,但值則不必鲫趁。
3.值可以取任何數(shù)據(jù)類型,但必須是不可變的利虫,如字符串挨厚,數(shù)或元組。

二糠惫、訪問字典里的值

把相應(yīng)的鍵放入熟悉的方括弧疫剃,如下實(shí)例:

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
 
print "dict['Name']: ", dict['Name'];
print "dict['Age']: ", dict['Age'];
#以上實(shí)例輸出結(jié)果:
#dict['Name']: Zara
#dict['Age']: 7

如果用字典里沒有的鍵訪問數(shù)據(jù),會輸出錯誤如下:

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
print "dict['Alice']: ", dict['Alice'];

以上實(shí)例輸出結(jié)果:

KeyError: 'Alice'

三硼讽、修改字典

向字典添加新內(nèi)容的方法是增加新的鍵/值對巢价,修改或刪除已有鍵/值對如下實(shí)例:

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
 
dict['Age'] = 8; # update existing entry
dict['School'] = "DPS School"; # Add new entry
 
  
print "dict['Age']: ", dict['Age'];
print "dict['School']: ", dict['School'];

以上實(shí)例輸出結(jié)果:

dict['Age']: 8
dict['School']: DPS School

四、刪除字典元素

能刪單一的元素也能清空字典,清空只需一項(xiàng)操作蹄溉。
顯示刪除一個字典用del命令咨油,如下實(shí)例:

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
 
del dict['Name']; # 刪除鍵是'Name'的條目
dict.clear();  # 清空詞典所有條目
del dict ;  # 刪除詞典
 
print "dict['Age']: ", dict['Age'];
print "dict['School']: ", dict['School'];
#但這會引發(fā)一個異常,因?yàn)橛胐el后字典不再存在:
dict['Age']:

五柒爵、字典鍵的特性

字典值可以沒有限制地取任何python對象役电,既可以是標(biāo)準(zhǔn)的對象,也可以是用戶定義的棉胀,但鍵不行法瑟。
兩個重要的點(diǎn)需要記住:

1)不允許同一個鍵出現(xiàn)兩次唁奢。創(chuàng)建時如果同一個鍵被賦值兩次霎挟,后一個值會被記住,如下實(shí)例:

dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'};
 
print "dict['Name']: ", dict['Name'];
#以上實(shí)例輸出結(jié)果:
#dict['Name']: Manni

2)鍵必須不可變麻掸,所以可以用數(shù)酥夭,字符串或元組充當(dāng),所以用列表就不行脊奋,如下實(shí)例:

 
print "dict['Name']: ", dict['Name'];
#以上實(shí)例輸出結(jié)果:
#TypeError: list objects are unhashable

六熬北、字典內(nèi)置函數(shù)&方法

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

cmp(dict1, dict2) #比較兩個字典元素。
len(dict) #計(jì)算字典元素個數(shù)诚隙,即鍵的總數(shù)讶隐。
str(dict) #輸出字典可打印的字符串表示。
type(variable) #返回輸入的變量類型久又,如果變量是字典就返回字典類型巫延。

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

radiansdict.clear() #刪除字典內(nèi)所有元素
radiansdict.copy() #返回一個字典的淺復(fù)制
radiansdict.fromkeys() #創(chuàng)建一個新字典,以序列seq中元素做字典的鍵地消,val為字典所有鍵對應(yīng)的初始值
radiansdict.get(key, default=None) #返回指定鍵的值炉峰,如果值不在字典中返回default值
radiansdict.has_key(key) #如果鍵在字典dict里返回true,否則返回false
radiansdict.items() #以列表返回可遍歷的(鍵, 值) 元組數(shù)組
radiansdict.keys() #以列表返回一個字典所有的鍵
radiansdict.setdefault(key, default=None) #和get()類似, 但如果鍵不已經(jīng)存在于字典中脉执,將會添加鍵并將值設(shè)為default
radiansdict.update(dict2) #把字典dict2的鍵/值對更新到dict里
radiansdict.values() #以列表返回字典中的所有值

七千康、字典練習(xí)代碼

print('''|---歡迎進(jìn)入通訊錄程序---|
|---1函卒、 查詢聯(lián)系人資料---|
|---2谷扣、 插入新的聯(lián)系人---|
|---3焙畔、 刪除已有聯(lián)系人---|
|---4、 退出通訊錄程序---|''')
addressBook={}#定義通訊錄
while 1:
 temp=input('請輸入指令代碼:')
 if not temp.isdigit():
  print("輸入的指令錯誤玻熙,請按照提示輸入")
  continue
 item=int(temp)#轉(zhuǎn)換為數(shù)字
 if item==4:
  print("|---感謝使用通訊錄程序---|")
  break
 name = input("請輸入聯(lián)系人姓名:")
 if item==1:
  if name in addressBook:
   print(name,':',addressBook[name])
   continue
  else:
   print("該聯(lián)系人不存在否彩!")
 if item==2:
  if name in addressBook:
   print("您輸入的姓名在通訊錄中已存在-->>",name,":",addressBook[name])
   isEdit=input("是否修改聯(lián)系人資料(Y/N):")
   if isEdit=='Y':
    userphone = input("請輸入聯(lián)系人電話:")
    addressBook[name]=userphone
    print("聯(lián)系人修改成功")
    continue
   else:
    continue
  else:
   userphone=input("請輸入聯(lián)系人電話:")
   addressBook[name]=userphone
   print("聯(lián)系人加入成功!")
   continue
 
 if item==3:
  if name in addressBook:
   del addressBook[name]
   print("刪除成功嗦随!")
   continue
  else:
   print("聯(lián)系人不存在")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末列荔,一起剝皮案震驚了整個濱河市敬尺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贴浙,老刑警劉巖砂吞,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異崎溃,居然都是意外死亡蜻直,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門袁串,熙熙樓的掌柜王于貴愁眉苦臉地迎上來概而,“玉大人,你說我怎么就攤上這事囱修∈旯澹” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵破镰,是天一觀的道長餐曼。 經(jīng)常有香客問我,道長鲜漩,這世上最難降的妖魔是什么晋辆? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮宇整,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘芋膘。我一直安慰自己鳞青,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布为朋。 她就那樣靜靜地躺著臂拓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪习寸。 梳的紋絲不亂的頭發(fā)上胶惰,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機(jī)與錄音霞溪,去河邊找鬼孵滞。 笑死,一個胖子當(dāng)著我的面吹牛鸯匹,可吹牛的內(nèi)容都是我干的坊饶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼殴蓬,長吁一口氣:“原來是場噩夢啊……” “哼匿级!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤痘绎,失蹤者是張志新(化名)和其女友劉穎津函,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體孤页,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡尔苦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了散庶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蕉堰。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖悲龟,靈堂內(nèi)的尸體忽然破棺而出屋讶,到底是詐尸還是另有隱情,我是刑警寧澤须教,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布皿渗,位于F島的核電站,受9級特大地震影響轻腺,放射性物質(zhì)發(fā)生泄漏乐疆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一贬养、第九天 我趴在偏房一處隱蔽的房頂上張望挤土。 院中可真熱鬧,春花似錦误算、人聲如沸仰美。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咖杂。三九已至,卻和暖如春蚊夫,著一層夾襖步出監(jiān)牢的瞬間诉字,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工知纷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留壤圃,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓琅轧,卻偏偏與公主長得像埃唯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鹰晨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

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