文 | 猿天罡
前言
前兩篇文章,我們學(xué)習(xí)了Python字典的基本用法和遍歷字典的三種方式
為了讓小伙伴們不耗費(fèi)多余的注意力,我們舉的例子都盡可能的簡(jiǎn)單,不信你回去看看,字典鍵對(duì)應(yīng)的值都是基本數(shù)據(jù)類型(字符串、數(shù)字等)。
其實(shí),字典里鍵對(duì)應(yīng)的值可以很復(fù)雜。
我們可以在字典中存儲(chǔ)列表,在列表中存儲(chǔ)字典,在字典中存儲(chǔ)字典等等。
Python中幾乎所有的數(shù)據(jù)類型,都可以存進(jìn)字典里。
學(xué)習(xí)不是一日之功,需擺正心態(tài),持之以恒,希望小伙伴們對(duì)學(xué)習(xí)一門語言抱有基本的耐心。
下面我們來 開心地 學(xué)習(xí)吧。
1.在字典里存儲(chǔ)列表
1.1字典里不全是列表
筆者在大學(xué)的時(shí)候,需要學(xué)習(xí)四門基礎(chǔ)專業(yè)課。
course
=
[
'數(shù)據(jù)結(jié)構(gòu)'
,
'計(jì)算機(jī)網(wǎng)絡(luò)'
,
'計(jì)算機(jī)組成原理'
,
'操作系統(tǒng)'
]
如果我們聲明一個(gè)學(xué)生字典,則專業(yè)課列表應(yīng)該在其字典之中。
student
=
{
'name'
:
'kelvin'
,
'age'
:
18
,
'course'
:
[
'數(shù)據(jù)結(jié)構(gòu)'
,
'計(jì)算機(jī)網(wǎng)絡(luò)'
,
'計(jì)算機(jī)組成原理'
,
'操作系統(tǒng)'
]
}
注:也可以用雙引號(hào)包裹字符串(別的文章可不會(huì)提醒的這么詳細(xì))
這種情況下,要想訪問課程列表,和我們講的字典訪問方法一毛一樣(基礎(chǔ)挺重要的):
student['course']
。
下面我們來打印這個(gè)學(xué)生的信息。
# 概述學(xué)生基本信息
print
(
'姓名:'
,
student
[
'name'
]
,
'年齡:'
,
student
[
'age'
]
)
print
(
'課程信息如下:'
)
for
course
in
student
[
'course'
]
:
print
(
"\t"
+
course
)
運(yùn)行結(jié)果如下:
說明(看得懂代碼可以跳過):
首先,我們創(chuàng)建了一個(gè)學(xué)生字典,字典里存儲(chǔ)了學(xué)生的姓名、年齡和課程信息。姓名和年齡都是基本數(shù)據(jù)類型(一個(gè)字符串另一個(gè)數(shù)字),課程是列表結(jié)構(gòu)。
然后,我們通過字典訪問方法
字典['鍵']
,一下子就把姓名和年齡拿到并輸出了。
最后,我們通過
student['course']
拿到了一個(gè)課程列表,但直接輸出格式太不好看了,所以我們對(duì)其進(jìn)行了遍歷,依次輸出學(xué)生要上的課程。
1.2字典里全是列表
還有一種字典里存列表的情況:鍵對(duì)應(yīng)的值全是列表。
遇到這種情況心里可以偷著樂,因?yàn)檠h(huán)遍歷的時(shí)候格式會(huì)很好看(后文會(huì)有解釋)。
學(xué)校老師需要每個(gè)學(xué)生的課程信息(因?yàn)橛械娜诉x課會(huì)不一樣)。
這個(gè)時(shí)候把學(xué)生姓名做鍵(實(shí)際情況下是用學(xué)號(hào),姓名會(huì)重復(fù)),以學(xué)生課程列表為值可以組成字典。
courses
=
{
'kelvin'
:
[
'數(shù)據(jù)結(jié)構(gòu)'
,
'計(jì)算機(jī)網(wǎng)絡(luò)'
,
'計(jì)算機(jī)組成原理'
,
'操作系統(tǒng)'
]
,
'vicky'
:
[
'xx經(jīng)濟(jì)學(xué)'
,
'西方經(jīng)濟(jì)學(xué)'
,
'統(tǒng)計(jì)學(xué)'
,
'發(fā)展經(jīng)濟(jì)學(xué)'
]
}
我們把多個(gè)學(xué)生的課程表打印輸出。
for
name
,
course
in
courses
.
items
(
)
:
print
(
name
+
'同學(xué)所學(xué)課程:'
)
for
c
in
course
:
print
(
"\t"
+
c
)
因?yàn)槊總€(gè)鍵對(duì)應(yīng)的都是列表,所以需要再使用一個(gè)
for
循環(huán)來遍歷學(xué)生課程列表。
解釋(看得懂代碼可以跳過):
首先,使用外層
for
循環(huán),依次將courses字典里的鍵和值分別賦值給變量
name
和
course
。
然后,
name
對(duì)應(yīng)的值是個(gè)簡(jiǎn)單的字符串,所以我們直接打印輸出了。
最后,遍歷
course
列表,格式化地打印學(xué)生所學(xué)課程。
再注:字典里不全是字典也可以用雙層循環(huán),只不過我們需要加個(gè)if判斷,如果值是列表才能進(jìn)入到內(nèi)層循環(huán)。
2.在字典里存儲(chǔ)字典
字典里存儲(chǔ)字典就很像俄羅斯套娃。
循環(huán)(打開)一層字典后,面對(duì)的還是字典,真是讓人驚喜又驚喜。
和在字典中存儲(chǔ)列表一樣,在字典里存儲(chǔ)字典也有兩種情況。
聰明的小伙伴已經(jīng)猜到了:在字典里不全是字典和在字典里全是字典。
看著讓人有點(diǎn)頭暈(建議看下前面的小標(biāo)題清醒一下)。
因?yàn)樵谧值淅锊蝗亲值浔容^簡(jiǎn)單(不理解的歡迎私信),所以我們重點(diǎn)講講在字典里全是字典的情況。
學(xué)校需要學(xué)生信息表(不是學(xué)生所上課程信息)。
如果要用字典來存儲(chǔ)的話,可以這樣。
students
=
{
'kelvin'
:
{
'age'
:
18
,
'course'
:
[
'數(shù)據(jù)結(jié)構(gòu)'
,
'計(jì)算機(jī)網(wǎng)絡(luò)'
,
'計(jì)算機(jī)組成原理'
,
'操作系統(tǒng)'
]
}
,
'vicky'
:
{
'age'
:
19
,
'course'
:
[
'xx經(jīng)濟(jì)學(xué)'
,
'西方經(jīng)濟(jì)學(xué)'
,
'統(tǒng)計(jì)學(xué)'
,
'發(fā)展經(jīng)濟(jì)學(xué)'
]
}
}
可以看到,外層students字典里面存儲(chǔ)的依然是以學(xué)生姓名為鍵,學(xué)生其他信息為值的字典。
更過分地是學(xué)生其他信息里竟然還有個(gè)學(xué)生列表。
看我們?cè)趺刺幚磉@些數(shù)據(jù)。
for
name
,
student
in
students
.
items
(
)
:
print
(
"姓名:"
,
name
,
",年齡:"
,
student
[
'age'
]
,
",所學(xué)課程:"
)
for
course
in
student
[
'course'
]
:
print
(
"\t"
+
course
)
我們先來看看效果圖:
常規(guī)嘮叨(看懂代碼的可以跳過):
首先,我們定義了一個(gè)學(xué)生字典,里面有兩個(gè)學(xué)生的信息。
學(xué)生信息是以姓名為鍵,其他信息為值。
然后,我們遍歷最外層字典,然后依次將
students
的鍵和值賦值給變量
name
和
student
。
接著,因?yàn)閷W(xué)生姓名賦值給了變量
name
,所以我們直接打印變量
name
。
學(xué)生的年齡信息存儲(chǔ)在
student
字典(內(nèi)層字典)里的,可以通過基本的字典訪問方法
student['age']
拿到并打印出來。
最后,遍歷
student['course']
,即課程列表,格式化輸出所學(xué)課程。
3.在列表里存儲(chǔ)字典
在列表里也可以存儲(chǔ)字典哦。
列表和字典的主要區(qū)別是前者沒有鍵而已。
這并不影響其存儲(chǔ)能力,事實(shí)上,列表也幾乎可以存儲(chǔ)所有的數(shù)據(jù)類型。
除了用字典存儲(chǔ)多個(gè)學(xué)生信息外,我們還可以用列表來存儲(chǔ)。
student1
=
{
'name'
:
'kelvin'
,
'age'
:
18
,
'course'
:
[
'數(shù)據(jù)結(jié)構(gòu)'
,
'計(jì)算機(jī)網(wǎng)絡(luò)'
,
'計(jì)算機(jī)組成原理'
,
'操作系統(tǒng)'
]
}
student2
=
{
'name'
:
'vicky'
,
'age'
:
19
,
'course'
:
[
'xx經(jīng)濟(jì)學(xué)'
,
'西方經(jīng)濟(jì)學(xué)'
,
'統(tǒng)計(jì)學(xué)'
,
'發(fā)展經(jīng)濟(jì)學(xué)'
]
}
students
=
[
student1
,
student2
]
我們先是定義了兩個(gè)學(xué)生字典,然后把它們存儲(chǔ)到了
students
列表中了。
怎么遍歷輸出字典列表的信息呢?
for
student
in
students
:
print
(
"姓名:"
,
student
[
'name'
]
,
",年齡:"
,
student
[
'age'
]
,
",所學(xué)課程:"
)
for
course
in
student
[
'course'
]
:
print
(
"\t"
+
course
)
直接上運(yùn)行結(jié)果:
沒人聽的碎碎念(看得懂代碼可以跳過):
首先,外層
for
循環(huán)依次取出存儲(chǔ)其中的字典(student1和student2)并把它們依次賦值給變量
student
。
然后,此時(shí)變量
student
就相當(dāng)于是某一個(gè)學(xué)生字典,所以我們可以通過
student['name']
和
student['age']
訪問到學(xué)生的姓名和年齡。
最后,因?yàn)?
student['course']
存儲(chǔ)的是課程列表,所以需要循環(huán)打印列表。
結(jié)尾語
Python語法簡(jiǎn)單且靈活,本文講述的字典和列表嵌套可以當(dāng)作拋磚引玉,希望能起到舉一反三的效果。
如果你對(duì)文中講述的內(nèi)容還有疑惑,歡迎和我交流,我們一起在討論中進(jìn)步。
掃碼關(guān)注「猿天罡」
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
