Python學習09:字典的嵌套和常用函數

筆者:風起怨江南 出處:https://blog.csdn.net/JackMengJin 筆者原創,文章歡迎轉載,如果喜歡請點贊+關注,感謝支持!

 

上一篇《Python學習08》爲字典基礎部分,傳送門 -> Python學習09揭開字典的神祕面紗

這一篇主要講字典的嵌套和字典的常用函數等內容

 

目錄

一、字典的嵌套

1.1 列表嵌套字典

1.2 字典嵌套列表

1.3 字典嵌套字典

二、字典的常用函數

2.1 fromkeys() 函數

2.2 copy() 函數

2.3 clear()函數

2.4 get() 函數

2.5 __contains__函數

2.6 items() 函數、keys() 函數、values()函數

2.7 update() 函數


 

字典的嵌套和常用函數

一、字典的嵌套

在字典嵌套的大前提,必須要弄清楚:

  • 字典裏的key不能重複
  • 字典裏的key必須是不可變的數據類型:比如數字、字符串、元組等

1.1 列表嵌套字典

先來個例子開個場,用列表去存儲每一個字典,字典裏存儲每個人個人信息:

list = [
    {'姓名':'Jack','性別':'男','年齡':'18','身高':'160','體重':'110','愛好':'python'},
    {'姓名':'Mary','性別':'女','年齡':'20','身高':'145','體重':'160','愛好':'rap'},
    {'姓名':'James','性別':'男','年齡':'35','身高':'178','體重':'115','愛好':'read'},
    {'姓名':'Kobe','性別':'男','年齡':'14','身高':'203','體重':'130','愛好':'cook'},
    {'姓名':'Carter','性別':'男','年齡':'32','身高':'215','體重':'142','愛好':'football'},
    {'姓名':'Cat','性別':'男','年齡':'64','身高':'180','體重':'135','愛好':'book'},
    {'姓名':'Mark','性別':'男','年齡':'27','身高':'103','體重':'180','愛好':'eat'},
    {'姓名':'Amy','性別':'女','年齡':'6','身高':'110','體重':'170','愛好':'swim'},
]
for i in list:
    print(i)

可以看到這裏我用了列表和字典做了一個嵌套,外面是列表,而列表裏每一個元素是字典。

我們怎麼去獲取到列表裏每一個元素(字典)呢?通過for循環遍歷:

for i in list:
    print(i)
{'姓名': 'Jack', '性別': '男', '年齡': '18', '身高': '160', '體重': '110', '愛好': 'python'}
{'姓名': 'Mary', '性別': '女', '年齡': '20', '身高': '145', '體重': '160', '愛好': 'rap'}
{'姓名': 'James', '性別': '男', '年齡': '35', '身高': '178', '體重': '115', '愛好': 'read'}
{'姓名': 'Kobe', '性別': '男', '年齡': '14', '身高': '203', '體重': '130', '愛好': 'cook'}
{'姓名': 'Carter', '性別': '男', '年齡': '32', '身高': '215', '體重': '142', '愛好': 'football'}
{'姓名': 'Cat', '性別': '男', '年齡': '64', '身高': '180', '體重': '135', '愛好': 'book'}
{'姓名': 'Mark', '性別': '男', '年齡': '27', '身高': '103', '體重': '180', '愛好': 'eat'}
{'姓名': 'Amy', '性別': '女', '年齡': '6', '身高': '110', '體重': '170', '愛好': 'swim'}

可以看到列表裏的元素可以通過for循環遍歷打印出來。

那麼如何再去獲取字典裏的每一個key或每一個value,甚至獲取全部呢?

還是通過for循環遍歷去獲取,獲取字典的key:

for i in range(len(list)):
    for j in list[i]:
        print(j)
姓名
性別
年齡
身高
體重
愛好
姓名
性別
年齡
身高
體重
愛好
姓名
性別
年齡
身高
體重
愛好
姓名
性別
年齡
身高
體重
愛好
姓名
性別
年齡
身高
體重
愛好
姓名
性別
年齡
身高
體重
愛好
姓名
性別
年齡
身高
體重
愛好
姓名
性別
年齡
身高
體重
愛好

獲取字典的value:

Jack
男
18
160
110
python
Mary
女
20
145
160
rap
James
男
35
178
115
read
Kobe
男
14
203
130
cook
Carter
男
32
215
142
football
Cat
男
64
180
135
book
Mark
男
27
103
180
eat
Amy
女
6
110
170
swim

獲取字典裏每個鍵值對

for i in range(len(list)):
    for j in list[i].items():
        print(j)

這裏我們可以看到獲取到的鍵值對是元組數據類型

('姓名', 'Jack')
('性別', '男')
('年齡', '18')
('身高', '160')
('體重', '110')
('愛好', 'python')
('姓名', 'Mary')
('性別', '女')
('年齡', '20')
('身高', '145')
('體重', '160')
('愛好', 'rap')
('姓名', 'James')
('性別', '男')
('年齡', '35')
('身高', '178')
('體重', '115')
('愛好', 'read')
('姓名', 'Kobe')
('性別', '男')
('年齡', '14')
('身高', '203')
('體重', '130')
('愛好', 'cook')
('姓名', 'Carter')
('性別', '男')
('年齡', '32')
('身高', '215')
('體重', '142')
('愛好', 'football')
('姓名', 'Cat')
('性別', '男')
('年齡', '64')
('身高', '180')
('體重', '135')
('愛好', 'book')
('姓名', 'Mark')
('性別', '男')
('年齡', '27')
('身高', '103')
('體重', '180')
('愛好', 'eat')
('姓名', 'Amy')
('性別', '女')
('年齡', '6')
('身高', '110')
('體重', '170')
('愛好', 'swim')

如果我們只想獲取到key和value,那麼就可以改爲:

for i in range(len(list)):
    for k,v in list[i].items():
        print(k,v)
姓名 Jack
性別 男
年齡 18
身高 160
體重 110
愛好 python
姓名 Mary
性別 女
年齡 20
身高 145
體重 160
愛好 rap
姓名 James
性別 男
年齡 35
身高 178
體重 115
愛好 read
姓名 Kobe
性別 男
年齡 14
身高 203
體重 130
愛好 cook
姓名 Carter
性別 男
年齡 32
身高 215
體重 142
愛好 football
姓名 Cat
性別 男
年齡 64
身高 180
體重 135
愛好 book
姓名 Mark
性別 男
年齡 27
身高 103
體重 180
愛好 eat
姓名 Amy
性別 女
年齡 6
身高 110
體重 170
愛好 swim

總結一下,這一部分的知識點:

for i in range(len(list)):
    for j in list[i]:
        print(j)

range(len(list))代表列表的長度,用for可以循環遍歷列表裏每個元素;

裏面的for循環的j代表列表裏具體的元素,而list[i]這裏表示字典裏的key;

如果想獲取到每個元素的值,那麼需要在後面加values();

如果想獲取整個鍵值對,在後面加items()。

那麼如何在字典裏嵌套列表或字典呢?同樣的道理。

 

1.2 字典嵌套列表

字典嵌套列表:字符串作爲key,列表作爲value。

#字典嵌套列表
dict = {
    '個人信息1':['姓名:Jack','性別:男','年齡:18','身高:160','體重:110','愛好:python'],
    '個人信息2':['姓名:Mary','性別:女','年齡:20','身高:145','體重:160','愛好:rap'],
    '個人信息3':['姓名:James','性別:男','年齡:35','身高:178','體重:115','愛好:read'],
}
for k,v in dict.items():
    print('\n',k,end=':')
    for x in v:
        print(x,end=' ')

打印輸出看一下效果:

 個人信息1:姓名:Jack 性別:男 年齡:18 身高:160 體重:110 愛好:python 
 個人信息2:姓名:Mary 性別:女 年齡:20 身高:145 體重:160 愛好:rap 
 個人信息3:姓名:James 性別:男 年齡:35 身高:178 體重:115 愛好:read 

分析一下:

外面的for循環的k,v分別代表字典dict裏的key和value,而key是字符串,value是列表;

第二個for循環的x表示value裏的元素,也就是列表裏每一個元素,通過for循環遍歷打印出來。

這裏需要注意的是,我用了end=' '參數,這裏是爲了實現print()輸出不換行。

 

1.3 字典嵌套字典

字典嵌套字典:字符串作爲key,字典作爲value:

#字典嵌套字典
dict = {
    'Jack的個人信息':{'性別':'男','年齡':'18','身高':'160','體重':'110','愛好':'python'},
    'Mary的個人信息':{'性別':'女','年齡':'20','身高':'145','體重':'160','愛好':'rap'},
    'James的個人信息':{'性別':'男','年齡':'35','身高':'178','體重':'115','愛好':'read'},
    'Kobe的個人信息':{'性別':'男','年齡':'14','身高':'203','體重':'130','愛好':'cook'},
    'Carter的個人信息':{'性別':'男','年齡':'32','身高':'215','體重':'142','愛好':'football'},
    'Cat的個人信息':{'性別':'男','年齡':'64','身高':'180','體重':'135','愛好':'book'},
    'Mark的個人信息':{'性別':'男','年齡':'27','身高':'103','體重':'180','愛好':'eat'},
    'Amy的個人信息':{'性別':'女','年齡':'6','身高':'110','體重':'170','愛好':'swim'},
}
#for遍歷
for k,v in dict.items():
    print('\n',k,end=': ')
    for x,y in v.items():
        print(x,y,end=' ')
 Jack: 性別 男 年齡 18 身高 160 體重 110 愛好 python 
 Mary: 性別 女 年齡 20 身高 145 體重 160 愛好 rap 
 James: 性別 男 年齡 35 身高 178 體重 115 愛好 read 
 Kobe: 性別 男 年齡 14 身高 203 體重 130 愛好 cook 
 Carter: 性別 男 年齡 32 身高 215 體重 142 愛好 football 
 Cat: 性別 男 年齡 64 身高 180 體重 135 愛好 book 
 Mark: 性別 男 年齡 27 身高 103 體重 180 愛好 eat 
 Amy: 性別 女 年齡 6 身高 110 體重 170 愛好 swim 

和前面幾個例子道理一樣:

第一個for循環裏k,v分別代表字典裏的key和value,key是字符串,value還是字典;

而第二個for循環裏x,y就代表了value字典裏的key和value。

那麼列表和字典的嵌套什麼時候用呢?

比如希望存儲年級前100名學生的各科成績時,由於學生是由成績進行排名的,列表是有序的數據類型,而字典是無序的數據類型,所以外面會用列表去存儲所有的數據。

而對於學生的各科成績來說,看重的不是有序,而是需要科目和成績一一對應,這纔是最重要的。或者說當我想獲取到年紀第十名同學的語文成績,那麼直接可以直接去獲取到列表對應的索引,和字典裏對應的key就可以了,這樣就能得到相應的value。

比如我想獲取amy的身高:

#字典的嵌套
list = [
    {'姓名':'Jack','性別':'男','年齡':'18','身高':'160','體重':'110','愛好':'python'},
    {'姓名':'Mary','性別':'女','年齡':'20','身高':'145','體重':'160','愛好':'rap'},
    {'姓名':'James','性別':'男','年齡':'35','身高':'178','體重':'115','愛好':'read'},
    {'姓名':'Kobe','性別':'男','年齡':'14','身高':'203','體重':'130','愛好':'cook'},
    {'姓名':'Carter','性別':'男','年齡':'32','身高':'215','體重':'142','愛好':'football'},
    {'姓名':'Cat','性別':'男','年齡':'64','身高':'180','體重':'135','愛好':'book'},
    {'姓名':'Mark','性別':'男','年齡':'27','身高':'103','體重':'180','愛好':'eat'},
    {'姓名':'Amy','性別':'女','年齡':'6','身高':'110','體重':'170','愛好':'swim'},
]
print(type(list))
print(type(list[-1]))
print(type(list[-1]['身高']))
print(list[-1]['身高'])
<class 'list'>
<class 'dict'>
<class 'str'>
110

可以看到list[-1]獲取到的就是列表對應索引的元素,也就是字典{'姓名':'Amy','性別':'女','年齡':'6','身高':'110','體重':'170','愛好':'swim'};直接去打印字典裏的key,就能獲取到字典的value。

至於其他嵌套的用法,會在之後具體的項目裏再詳細說明。


 

二、字典的常用函數

2.1 fromkeys() 函數

python裏fromkeys() 函數用於創建一個新字典,以序列 seq 中元素做字典的鍵,value 爲字典所有鍵對應的初始值。

fromkeys()語法:

dict.fromkeys(seq[, value])
  • seq -- 字典鍵值列表。
  • value -- 可選參數, 設置鍵序列(seq)的值。

返回值:

舉個例子更清楚:

#字典的函數
dict_new = {}
print('打印字典:',dict_new)
seq = ('1','2','3','4','5')
dict_new.fromkeys(seq,'20')
print('打印字典:',dict_new)
打印字典: {}
打印字典: {}

咦?打印出來怎麼是空的字典?爲什麼dict_new裏什麼都沒有?

這裏需要注意的是,fromkeys() 函數用於創建一個新字典,這裏dict_new.fromkeys(seq,'20')就已經是新字典,而不是在原dict_new字典裏添加鍵和值。所以如果想用dict_new去接收新字典,還需要給dict_new賦值dict_new.fromkeys(seq,'20')才行。

#字典的函數
dict_new = {}
print('打印字典:',dict_new)
seq = ('1','2','3','4','5')
dict_new.fromkeys(seq,'20')
print('打印字典:',dict_new)
print('打印字典:',dict_new.fromkeys(seq,'20'))
dict_new = dict_new.fromkeys(seq,'20')
print('打印字典:',dict_new)
打印字典: {}
打印字典: {}
打印字典: {'1': '20', '2': '20', '3': '20', '4': '20', '5': '20'}
打印字典: {'1': '20', '2': '20', '3': '20', '4': '20', '5': '20'}

同樣需要注意,seq這裏必須是不可變數據類型才行,這裏需要注意。

 

2.2 copy() 函數

copy() 函數返回一個字典的淺複製,而賦值和淺賦值還有深複製這裏不延展講,之後會另出講解。

clear()語法:

dict.copy()

返回值:

返回一個字典的淺複製。

#copy()
dict_demo = {'大佬':'我','菜鳥':'小明'}
print(dict_demo)
dict_demo1 = dict_demo.copy()
print(dict_demo1)
{'大佬': '我', '菜鳥': '小明'}
{'大佬': '我', '菜鳥': '小明'}

 

2.3 clear()函數

clear() 函數用於刪除字典內所有元素。

clear()語法:

dict.clear()

返回值:

該函數沒有任何返回值。

#clear()
dict_demo = {'大佬':'我','菜鳥':'小明'}
print(dict_demo)
dict_demo.clear()
print(dict_demo)
{'大佬': '我', '菜鳥': '小明'}
{}

 

2.4 get() 函數

get() 函數返回指定鍵的值,如果值不在字典中返回默認值。

get()語法:

dict.get(key, default=None)

返回值:

返回指定鍵的值,如果值不在字典中返回默認值None。

#get()
dict_demo = {'大佬':'我','菜鳥':'小明'}
print(dict_demo)
print(dict_demo.get('大佬'))
print(dict_demo.get('大哥'))
{'大佬': '我', '菜鳥': '小明'}
我
None

 

2.5 __contains__函數

python3版本中用__contains__函數代替has_key() 函數,用於判斷鍵是否存在於字典中,如果鍵在字典dict裏返回true,否則返回false。

__contains__語法:

dict.__contains__(key)

返回值:

如果鍵在字典裏返回true,否則返回false。

#__contains__
dict_demo = {'大佬':'我','菜鳥':'小明'}
print(dict_demo.__contains__('大佬'))
True

 

2.6 items() 函數、keys() 函數、values()函數

items() 函數以列表返回可遍歷的(鍵, 值) 元組數組。其實就是把字典中每對鍵值對組成一個元組,並把這些元組放在列表中返回。

相對應的,keys() 函數以列表返回一個字典所有的鍵,values()函數以列表返回一個字典所有的值。

item()語法:

dict.items()

keys() 語法:

dict.keys()

values()語法:

dict.values()

item()返回值:

返回可遍歷的(鍵, 值) 元組數組。

keys() 返回值:

返回一個字典所有的鍵。

values()返回值:

返回一個字典所有的值。

dict_demo = {'大佬':'我','菜鳥':'小明'}
print(dict_demo.items())
print(dict_demo.keys())
print(dict_demo.values())
dict_items([('大佬', '我'), ('菜鳥', '小明')])
dict_keys(['大佬', '菜鳥'])
dict_values(['我', '小明'])

 

2.7 update() 函數

update() 函數把字典dict2的鍵/值對更新到dict裏。

update() 語法:

dict.update(dict2)

返回值:

沒有任何返回值。

如果沒有相同的key時:

#update
dict_demo = {'大佬':'我','菜鳥':'小明'}
dict_demo1 = {'高手':'傑克','大神':'小豬'}
print(dict_demo)
print(dict_demo1)
dict_demo1.update(dict_demo)
print(dict_demo1)
{'大佬': '我', '菜鳥': '小明'}
{'高手': '傑克', '大神': '小豬'}
{'高手': '傑克', '大神': '小豬', '大佬': '我', '菜鳥': '小明'}

如果有相同的key時會怎麼處理呢?

#update
dict_demo = {'大佬':'我','菜鳥':'小明'}
dict_demo1 = {'大佬':'傑克','大神':'小豬'}
print(dict_demo)
print(dict_demo1)
dict_demo1.update(dict_demo)
print(dict_demo1)

可以看到有相同的鍵會直接替換成update的值

{'大佬': '我', '菜鳥': '小明'}
{'大佬': '傑克', '大神': '小豬'}
{'大佬': '我', '大神': '小豬', '菜鳥': '小明'}

其他更多的字典函數,會在之後具體項目中的使用再詳細講解。

 


以上便是《Python學習08講——Python學習09:字典的嵌套和常用函數》的所有內容,更多python學習請繼續關注我的博客——風起怨江南(傳送門,不定期更新,原創不易,如果喜歡請點贊和關注,謝謝大家的支持!

想獲得免費的學習資料請添加微信公衆號——風起怨江南,非常感謝大家的關注和支持!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章