小白學 Python(13):基礎數據結構(字典)(下)

人生苦短,我選Pythonpython

前文傳送門git

小白學 Python(1):開篇github

小白學 Python(2):基礎數據類型(上)編程

小白學 Python(3):基礎數據類型(下)數組

小白學 Python(4):變量基礎操做數據結構

小白學 Python(5):基礎運算符(上)函數

小白學 Python(6):基礎運算符(下)code

小白學 Python(7):基礎流程控制(上)對象

小白學 Python(8):基礎流程控制(下)blog

小白學 Python(9):基礎數據結構(列表)(上)

小白學 Python(10):基礎數據結構(列表)(下)

小白學 Python(11):基礎數據結構(元組)

小白學 Python(12):基礎數據結構(字典)(上)

字典內置函數 & 方法

(若是是來看錶情包的,能夠退出去了,本篇無表情包)

字典提供了不少內置方法對字典進行操控。

老規矩,一邊看代碼一邊介紹。

dict.keys()

做用: 返回一個迭代器,可使用 list() 來轉換爲列表,該列表包含全部的 key。

dict1 = {'name': 'geekdigging', 'age': 2}

print(dict1.keys())
print(list(dict1.keys()))
print(type(list(dict1.keys())))

結果以下:

dict_keys(['name', 'age'])
['name', 'age']
<class 'list'>

dict.values()

做用: 返回一個迭代器,可使用 list() 來轉換爲列表,該列表包含全部的 value 。

print(dict1.values())
print(list(dict1.values()))
print(type(list(dict1.values())))

結果以下:

dict_values(['geekdigging', 2])
['geekdigging', 2]
<class 'list'>

dict.items()

做用: 以列表返回可遍歷的(鍵, 值) 元組數組。

print(dict1.items())
print(list(dict1.items()))
print(type(list(dict1.items())))

結果以下:

dict_items([('name', 'geekdigging'), ('age', 2)])
[('name', 'geekdigging'), ('age', 2)]
<class 'list'>

dict.get(key, default=None)

做用: 返回指定鍵的值,若是值不在字典中返回 default(None) 值。

print(dict1.get('name'))
print(dict1.get('geekdigging'))

結果以下:

geekdigging
None

由於 geekdigging 並非字典中的 key ,因此返回了默認值 None 。

dict.pop(key[,default])

做用: 刪除字典給定鍵 key 所對應的值,返回值爲被刪除的值。key值必須給出。

print(dict1.pop('age'))
print(dict1)

結果以下:

2
{'name': 'geekdigging'}

dict.setdefault(key, default=None)

做用: 和get()相似, 但若是鍵不存在於字典中,將會添加鍵並將值設爲 default 。

dict1.setdefault('age')
print(dict1)

結果以下:

{'name': 'geekdigging', 'age': None}

dict.update(dict2)

做用: 把字典 dict2 的鍵/值對更新到 dict 裏。

dict2 = {'sex': 'male'}
dict1.update(dict2)
print(dict1)

結果以下:

{'name': 'geekdigging', 'age': None, 'sex': 'male'}

dict.clear()

做用: 刪除字典內全部元素。

注意: 刪除字典內全部元素,並不是刪除字典。

dict2.clear()
print(dict2)

結果以下:

{}

dict.copy()

做用: 返回一個字典的淺複製。

注意: 這裏的 copy 是淺 copy ,有編程經驗的同窗估計理解起來並沒有難度。無經驗的同窗且聽我慢慢道來,淺拷貝本質上拷貝的是一個引用,並不是拷貝了整個內容,舉例子的話就比如我有一個蘋果,而且淺拷貝了一個給小明,我咬了一口個人蘋果,可是小明發現他的蘋果也被咬了一口。

dict3 = {'name': 'geekdigging', 'age': [1, 2, 3]}
# 淺拷貝: 引用對象
dict4 = dict3
print(id(dict3))
print(id(dict4))
# 淺拷貝:深拷貝父對象(一級目錄),子對象(二級目錄)不拷貝,仍是引用
dict5 = dict3.copy()
dict3['age'].remove(1)
print(dict3)
print(dict5)
print(id(dict3))
print(id(dict5))

結果以下:

2418990911064
2418990911064
{'name': 'geekdigging', 'age': [2, 3]}
{'name': 'geekdigging', 'age': [2, 3]}
2418990911064
2418991599688

這個示例理解稍有費勁兒,不着急,慢慢品,細品。

若是我想全都深 copy ,怎麼作呢?

能夠引入 copy 模塊實現。

import copy

dict3 = {'name': 'geekdigging', 'age': [1, 2, 3]}
dict6 = copy.deepcopy(dict3)
dict3['age'].remove(1)
print(dict3)
print(dict6)
print(id(dict3))
print(id(dict6))

結果以下:

{'name': 'geekdigging', 'age': [2, 3]}
{'name': 'geekdigging', 'age': [1, 2, 3]}
2418991602168
2418991602008

初次接觸的同窗,以上兩個示例並很差理解,若是在理解上有問題的能夠在公衆號留言問我。

老生常談再多 BB 一句,請各位同窗親自動手實踐一下示例代碼。

示例代碼

本系列的全部代碼小編都會放在代碼管理倉庫 Github 和 Gitee 上,方便你們取用。

示例代碼-Github

示例代碼-Gitee

相關文章
相關標籤/搜索