聲明:博主(昊虹圖像算法)寫這篇博文時,用的Python的版本號為3.9.10。
字典(dict)的格式如下:
dict1 = {
key1 : value1, key2 : value2, key3 : value3 }
從上面的格式我們可以看出:
字典的每個鍵值 key=>value 對用冒號分割,每個對之間用逗號分割,整個字典包括在花括號 {} 中。
另外字典要求鍵必須是唯一的,但值則不必。
# 創建有內容的字典
dict1 = {
'name': 'suwenhao', 'likes': 'reading', 123: 456}
# 方法一創建空字典
dict2 = {
}
# 方法二創建空字典
dict3 = dict()
運行結果如下:
語法如下:
dict.fromkeys(keys, value)
keys —必需。指定新字典鍵的可迭代對象。
value—可選。所有鍵的值。默認值是 None。
第一個示例代碼如下:
x = ('key1', 'key2', 'key3')
y = 0
dict1 = dict.fromkeys(x, y)
運行結果如下:
第二個示例代碼:
x = ('key1', 'key2', 'key3')
y = (61, 62, 63)
dict1 = dict.fromkeys(x, y)
運行結果如下:
注意:key1的鍵值並不是61,而是元組(61, 62, 63),這 一點要注意。
第三個示例代碼:
x = ('key1', 'key2', 'key3')
dict1 = dict.fromkeys(x)
運行結果如下:
示例代碼如下:
dict1 = {
'name': 'suwenhao', 'likes': 'reading', 123: 456}
str1 = dict1['name']
value1 = dict1[123]
運行結果如下:
示例代碼如下:
dict1 = {
'name': 'suwenhao', 'likes': 'reading', 123: 456}
k = 1
dict1['name'] = 'wanghong' # 更新鍵name的值
dict1['height'] = 167 # 增加鍵值
運行結果如下:
提問:為什麼中間有插一句語句"k = 1",答案見下面這篇博文:
https://blog.csdn.net/wenhao_ir/article/details/125416514
示例代碼如下:
dict1 = {
'name': 'suwenhao', 'likes': 'reading', 123: 456}
del dict1['name']
運行結果如下:
示例代碼如下:
dict1 = {
'name': 'suwenhao', 'likes': 'reading', 123: 456}
dict2 = {
'name': 'wanghong', 'likes': 'sing', 999: 704}
del dict1
運行結果如下:
示例代碼如下:
dict1 = {
'name': 'suwenhao', 'likes': 'reading', 123: 456}
dict1.clear()
運行結果如下:
示例代碼如下:
dict1 = {
'name': 'suwenhao', 'likes': 'reading', 123: 456}
len1 = len(dict1)
運行結果如下:
示例代碼如下:
dict1 = {
'name': 'suwenhao', 'likes': 'reading', 123: 456}
str1 = str(dict1)
print(str1)
運行結果如下:
示例代碼如下:
dict1 = {
'name': 'suwenhao', 'likes': 'reading', 123: 456}
dict2 = dict1.copy()
dict1['name'] = 'zhangsan'
從運行結果我們可以看出,方法copy()的確實現的是深拷貝,改變dict1的鍵值並沒有影響到dict2的值。
示例代碼如下:
dict1 = {
'name': 'suwenhao', 'likes': 'reading', 123: 456}
dict2 = dict1
dict1['name'] = 'zhangsan'
運行結果如下:
從上面的運行結果可以看出,dict1鍵值的修改影響了dict2的鍵值,說明二者是共用內存空間的。
示例代碼如下:
dict1 = {
'name': 'suwenhao', 'likes': 'reading', 123: 456}
bool1 = 'name' in dict1
bool2 = 'weight' in dict1
運行結果如下:
示例代碼如下:
dict1 = {
'name': 'suwenhao', 'likes': 'reading', 123: 456}
dict1_items = dict1.items()
print(dict1_items)
運行結果如下:
可見,這個視圖對象就是把字典對象換了一種形式表示。
比如原來的鍵值形式為:
'name': 'suwenhao'
轉換為視圖對象(dict_items)後為下面這樣的形式:
('name', 'suwenhao')
值得注意的是,原鍵值必變,對應的視圖對象也會跟著改變,看一個例子:
dict1 = {
'name': 'suwenhao', 'likes': 'reading', 123: 456}
dict1_items = dict1.items()
dict1['name'] = 'zhangsan'
print(dict1_items)
運行結果如下圖所示:
視圖對象可以用函數list()轉換為列表類型,如下面的例子:
dict1 = {
'name': 'suwenhao', 'likes': 'reading', 123: 456}
dict1_items = dict1.items()
list1 = list(dict1_items)
運行結果如下:
從上面的結果可以看出,轉換為列表對象後,每一個鍵值是一個元組(tuple)。
關於視圖對象,注意,我們不能對視圖對象進行任何的修改,因為字典的視圖對象都是只讀的。
示例代碼如下:
dict1 = {
'name': 'suwenhao', 'likes': 'reading', 123: 456}
dict1_keys = dict1.keys()
list1 = list(dict1_keys)
運行結果如下:
相關知識和說明請參考“10-使用方法items()獲得字典鍵和值的視圖對象”
示例代碼如下:
dict1 = {
'name': 'suwenhao', 'likes': 'reading', 123: 456}
dict1_values = dict1.values()
list1 = list(dict1_values)
運行結果如下:
相關知識和說明請參考“10-使用方法items()獲得字典鍵和值的視圖對象”
示例代碼如下:
dict1 = {
'name': 'suwenhao', 'likes': 'reading', 123: 456}
str1 = dict1.get('name')
運行結果如下:
方法 setdefault()的語法如下:
dict.setdefault(key, default=None)
參數:
key – 查找的鍵值。
default – 鍵不存在時,設置的默認鍵值。
返回值:
如果 key 在 字典中,返回對應的值。如果不在字典中,則插入 key 及設置的默認值 default,並返回 default ,default 默認值為 None。
示例代碼如下:
dict1 = {
'name': 'suwenhao', 'likes': 'reading', 123: 456}
str1 = dict1.setdefault('name', 'zhangsan')
str2 = dict1.setdefault('likes', None)
temp1 = dict1.setdefault('weight', None)
運行結果如下:
結果分析:
由於鍵’name’是存在的,所以語句:
str1 = dict1.setdefault('name', 'zhangsan')
並不會改變其鍵值,並且返回了其鍵值‘suwenhao’
由於鍵’weight’是不存在的,所以在字典dict1中新增了鍵’weight’,其值設為None。
示例代碼如下:
dict1 = {
'name': 'suwenhao', 'likes': 'reading', 123: 456}
dict2 = {
'weight': 30}
dict1.update(dict2)
運行結果如下:
示例代碼如下:
dict1 = {
'name': 'suwenhao', 'likes': 'reading', 123: 456}
temp1 = dict1.pop('name')
運行結果如下:
最後插入的鍵值通常就是末尾鍵值嘛。
示例代碼如下:
dict1 = {
'name': 'suwenhao', 'likes': 'reading', 123: 456}
temp1 = dict1.popitem()
運行結果如下:
1、不允許同一個鍵出現兩次。創建時如果同一個鍵被賦值兩次,後一個值會被記住,如下實例:
dict1 = {
'name': 'suwenhao', 'likes': 'reading', 123: 456, 'name': 'zhangsan'}
str1 = dict1['name']
運行結果如下:
2、鍵必須不可變,所以可以用數字,字符串或元組充當,而用列表就不行,如下面的語句:
dict1 = {
['name']: 'suwenhao', 'likes': 'reading', 123: 456}
在運行時報錯如下:
參考資料:
https://blog.csdn.net/wenhao_ir/article/details/125100220