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

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