Python3 字典

小拇哥發表於2018-08-27

Python3字典特點

  1. 無序

  2.鍵唯一      #不可變物件:整數、字串、元組;可變物件:列表、字典

    鍵:字典中,字典值可以是pyton 任意一個物件,但鍵不行;鍵在字典中不能出現相同的鍵,如果相同,後一個值會被記住,如下例項:

dic = {`name`:`xp`,`name`:`26`,`job`:`IT`,`salary`:9000}
print(dic) # 列印結果為:{`name`: `26`, `job`: `IT`, `salary`: 9000}

    鍵必須不可變,可以是數字,字串或者元組,決不能用列表和字典。

字典的建立

  字典的每個鍵值(key)對用冒號(:)分割,每個鍵值對之間用逗號(,)分割,整個字典包括在花括號({})中 ,格式如下所示:

1 dic = {`name`:`xp`,`age`:`26`,`job`:`IT`,`salary`:9000}
2 print(dic)

查 通過鍵去查詢

  把相應的鍵放入到方括號中

1 dic = {`name`:`xp`,`age`:`26`,`job`:`IT`,`salary`:9000}
2 print(dic[`age`])   #列印結果為:26
3 print(list(dic.keys())) #以列表形式列印字典中的鍵;也可以不用加liest轉換    dic.keys()
4 #列印結果:[`name`, `age`, `job`, `salary`]
5 print(list(dic.values())) # 以列表形式列印字典中所有鍵對應的值            dic.values()
6 #列印結果為:[`xp`, `26`, `IT`, 9000]
7 print(list(dic.items())) #以列表的形式列印字典中所有的鍵值對              dic.items()
8 #列印結果為:[(`name`, `xp`), (`age`, `26`), (`job`, `IT`), (`salary`, 9000)]

  上述程式中有一種情況下需要用 list 轉換,如下程式:

1 dic = {`name`:`xp`,`age`:`26`,`job`:`IT`,`salary`:9000}
2 dic1 = dic.keys()
3 print(dic1)   #列印結果為:dict_keys([`name`, `age`, `job`, `salary`])
4 #print(dic1[1]) 列印這句話會報錯
5 #報錯 TypeError: `dict_keys` object does not support indexing  是因為dic1列印出來的是物件不是列表,怎麼辦呢?
6 
7 print(list(dic1)[1]) #列印結果為: age
8 #加上list 轉換,將dic1轉換為列表:[`name`, `age`, `job`, `salary`],然後取[1]元素。

  字典中鍵不存在會是什麼樣呢?請看例項

1 dic = {`name`:`xp`,`job`:`IT`,`salary`:9000}
2 print(dic)# 列印結果為:{`name`: `xp`, `job`: `IT`, `salary`: 9000}
3 dic[`age`] = 18
4 print(dic)#列印結果為:{`name`: `xp`, `job`: `IT`, `salary`: 9000, `age`: 18}
5 #通過例子我們能看出字典中如果鍵不存在,將會新增對應的鍵值對。這也是新增字典的一種方法如果將dic[`age`] = 18 改為 dic[`age`] 那麼會報錯,大家可以試試。

  字典中鍵存在,又會是什麼結果呢?請看例項

1 dic = {`name`:`xp`,`age`:26,`job`:`IT`,`salary`:9000}
2 
3 ret = dic.setdefault(`age`,34)  #setdefault() 函式 如果鍵存在,則返回對應的值,
4 print(ret) #列印結果為:26

改 修改字典

  通過增加新的鍵值對,來修改或者刪除字典中已有的內容

1 dic = {`name`:`xp`,`age`:`26`,`job`:`IT`,`salary`:9000}
2 dic[`age`] = 20  #通過鍵來修改對應的值。
3 print(dic)
4 #列印結果為:{`name`: `xp`, `age`: 20, `job`: `IT`, `salary`: 9000}
5 
6 dic[`like`] = `book`
7 print(dic)
8 #列印結果為:{`name`: `xp`, `age`: 20, `job`: `IT`, `salary`: 9000, `like`: `book`}
1 dic = {`name`:`xp`,`age`:`26`,`job`:`IT`,`salary`:9000}
2 dic1 = {`like`:`book`,`name`:`UUM`}
3 dic.update(dic1)# update()  通過函式進行修改,被修改的字典裡與要新增的鍵相同,則被修改的字典對應的鍵值被更新
4 print(dic) 
5 #列印結果為:{`name`: `UUM`, `age`: `26`, `job`: `IT`, `salary`: 9000, `like`: `book`}
6 
7 print(dic1)
8 #列印結果為:{`like`: `book`, `name`: `UUM`}

 

刪 刪除字典

 1 #程式1
 2 dic = {`name`:`xp`,`age`:`26`,`job`:`IT`,`salary`:9000}
 3 del dic[`name`]  #通過鍵來刪除字典中的鍵值對
 4 print(dic) # 列印結果為:{`age`: `26`, `job`: `IT`, `salary`: 9000}
 5 
 6 #程式2
 7 dic = {`name`:`xp`,`age`:`26`,`job`:`IT`,`salary`:9000}
 8 a=dic.pop(`age`)  #刪除該鍵值對應的值,並返回該鍵值對應的值
 9 print(dic) #列印結果為:{`name`: `xp`, `job`: `IT`, `salary`: 9000}
10 print(a) #列印結果為:26
11 
12 #程式3
13 dic = {`name`:`xp`,`age`:`26`,`job`:`IT`,`salary`:9000}
14 b = dic.popitem()  #隨機刪除字典中某組鍵對值,並以元組方式返回
15 print(b)   # 列印結果為:(`salary`, 9000)
16 print(dic) # 列印結果為:{`name`: `xp`, `age`: `26`, `job`: `IT`}
17 
18 #程式4
19 dic = {`name`:`xp`,`age`:`26`,`job`:`IT`,`salary`:9000}
20 dic.clear()   #清空字典,但字典還存在,只不過是是一個空字典
21 print(dic) #列印結果為:{}
22 
23 del dic #刪除字典,再列印的話會報錯
24 print(dic) #提示錯誤:NameError: name `dic` is not defined

 

字典巢狀

   字典是支援無限極巢狀的。

 1 cities = {
 2     `河南省`:{
 3         `商丘市`:[`民權縣`,`睢縣`,`寧陵縣`],
 4         `開封市`:[`蘭考縣`,`杞縣`,`通許縣`],
 5         `洛陽市`:[`宜陽縣`,`洛川縣`,`伊川縣`]
 6             },
 7     `北京市`:{
 8         `大興區`:[`西紅門`,`黃村`,`天宮院`],
 9         `豐臺區`:[`郭公莊`,`科技園`,`總部基地`],
10         `朝陽區`:[`望京`,`將臺`,`太陽宮`],
11         `海淀區`:[`萬柳`,`三小`,`巴溝`]
12             },
13     `河北省`:{
14         `保定市`:[`涿州市`,`高碑店`,`保定`],
15         `廊坊`:[`永清`,`自然公園`,`安次區`],
16         `張家口`:[`懷安縣`,`萬全區`,`橋西區`]
17             }
18         }
19 print(cities[`河南省`][`洛陽市`][1])
20 #列印結果為:洛川縣

  由上面的例子可知,河南省、北京市、河北省是個大的字典,而河南省又是個字典,字典裡面又巢狀列表。

其他操作

  dic.formkeys(引數,子引數) 其中引數可以是列表、元組。

1 dic = {}  #定義一個空字典
2 dic1 = dic.fromkeys((`host1`,`host2`,`host3`),`date`)#.formkeys(引數,子引數)函式會生成一個字典
3 print(dic1)   #一般初始化用 
4 # 列印結果為:{`host1`: `date`, `host2`: `date`, `host3`: `date`}
dic = {}  #定義一個空字典
dic1 = dic.fromkeys([`host1`,`host2`,`host3`],#會列印字典裡面有列表[`date1`,`date2`])#.formkeys(引數,子引數)函式會生成一個字典
print(dic1)   #一般初始化用
# 列印結果為:{`host1`: [`date1`, `date2`], `host2`: [`date1`, `date2`], `host3`: [`date1`, `date2`]}

  sorted()

dic = {`name`:`xp`,`age`:26,`job`:`IT`,`salary`:9000}
print(sorted(dic))    # 對鍵進行排序
#列印結果為:[`age`, `job`, `name`, `salary`]
print(sorted(dic.items())) # 對鍵值對進行排序
#列印結果為:[(`age`, 26), (`job`, `IT`), (`name`, `xp`), (`salary`, 9000)]

迴圈列印字典中的 values 和keys 的值

1 dic = {`name`:`xp`,`age`:26,`job`:`IT`,`salary`:9000}
2 for i in dic.values():    #迴圈列印字典中鍵對應的值(values)
3     print(i)
4 for i in dic.keys():  #迴圈列印鍵的值(keys)
5     print(i)

字典目前學到的就這些,以上是我學習過程中所總結的筆記,希望對大家有所幫助,覺得不錯可以關注我哦~_~

 

相關文章