Python字典嵌套

文 | 猿天罡

前言

前兩篇文章,我們學習了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)

運行結果如下:

圖1-1

說明(看得懂代碼可以跳過):

首先,我們創建了一個學生字典,字典裏存儲了學生的姓名、年齡和課程信息。姓名和年齡都是基本數據類型(一個字符串另一個數字),課程是列表結構。

然後,我們通過字典訪問方法字典['鍵'],一下子就把姓名和年齡拿到並輸出了。

最後,我們通過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字典裏的鍵和值分別賦值給變量namecourse

然後,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的鍵和值賦值給變量namestudent

接着,因爲學生姓名賦值給了變量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字典數據寫入TXT文件分析

 

關於字典數據

一個字典由key和value組成,可以通過key值、get()、keys()、values()、items()等方法查找字典中的數據。

字典中get()、keys()、values()、items()方法的使用

  1. get()方法: 字典名.get(key, 默認值) 如果當前key不存在,則返回默認值,如果省略默認值,則返回None
dict1 = {'name': 'Jiangyou', 'age': '20', 'sex': '男'}
print(dict1.get('name'))
print(dict1.get('office', 'IT'))
print(dict1.get('office'))
'''得到的結果'''
Jiangyou
IT
None
  1. keys()方法: 字典名.keys() 返回字典中所有的鍵(key)
dict1 = {'name': 'Jiangyou', 'age': '20', 'sex': '男'}
print(dict1.keys())
'''得到的結果'''
dict_keys(['name', 'age', 'sex'])
  1. values()方法: 字典名.values() 返回字典中所有的值(value)
dict1 = {'name': 'Jiangyou', 'age': '20', 'sex': '男'}
print(dict1.values())
'''得到的結果'''
dict_values(['Jiangyou', '20', '男'])
  1. items()方法: 字典名.item() 將鍵值對以元組的方式返回(key, value)
dict1 = {'name': 'Jiangyou', 'age': '20', 'sex': '男'}
print(dict1.items())
'''得到的結果'''
dict_items([('name', 'Jiangyou'), ('age', '20'), ('sex', '男')])

取出字典中的數據並寫入txt中

第一步 將字典中的數據通過 for 循環 items() 方法遍歷出來;依然使用之前的簡單字典`

dict1 = {'name': 'Jiangyou', 'age': '20', 'sex': '男'}
for item in dict1.items():
    print(item)
'''得到的結果'''
('name', 'Jiangyou')
('age', '20')
('sex', '男')

在將字典中數據遍歷出來之後,我們可以看到字典中的數據以 鍵值對 的方式存放在 元組 中,但是因爲元組無法寫入txt中,所以接下來我們需要使用操作元組的方法,將數據單個提取出來即可:

for item in dict1.items():
    for i in range(len(item)):
        str1 = item[i]
        print(str1)
'''得到的結果'''
name
Jiangyou
age
20
sex
男

如果你不想分行顯示,可以在 print() 中設置 end 參數
接下來執行寫入操作:

for item in dict1.items():
    for i in range(len(item)):
        str1 = item[i]
        print(str1,end=' ')
        with open(r'D:\通訊錄.txt', 'a') as f:
            f.write(str1)
            f.write('\r\t')

代碼運行結束後會在 D 盤目錄下創建一個名爲“通訊錄.txt”的文件 ,字典中的數據就存入txt中了

代碼中 f.write(’\r\t’) 的作用是對存入的數據,以一個 tab 單位(四個空格)分隔開

本文所使用方法非常簡單和基礎,適合初學者瞭解Pthon 中字典、元組、文件操作的基礎用法,至於更復雜的,在需要的時候可以以此爲基礎,進行改進


————————————————
版權聲明:本文爲CSDN博主「誰偷了我的小魚乾兒」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/Albert_1000/article/details/99087889

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