這次咱們記錄的是python中的字典這個鬼,首先我們得了解,字典是另一種可變容器模型,且可存儲任意類型對象。字典的每個鍵值 key=>value 對用冒号 : 分割,每個鍵值對之間用逗号 , 分割,整個字典包括在花括号 {} 中 ,格式如下所示:
d = { key1 : value1 , key2 : value2 }
鍵一般是唯一的,如果重複最後的一個鍵值對會替換前面的,值不需要唯一。看一下執行個體:
>>> dict = { ' a ' : 1 , ' b ' : 2 , ' b ' : ' 3 ' }; >>> dict [ ' b ' ] ' 3 ' >>> dict { ' a ' : 1 , ' b ' : ' 3 ' }
值可以取任何資料類型,但鍵必須是不可變的,如字元串,數字或元組。下面來看一個簡單的字典執行個體:
dict = { ' Alice ' : ' 2341 ' , ' Beth ' : ' 9102 ' , ' Cecil ' : ' 3258 ' }
同樣,我們也可如此建立字典:
dict1 = { ' abc ' : 456 }; dict2 = { ' abc ' : 123 , 98.6 : 37 };
接下來,我們來通路字典裡的值,方式就是把相應的鍵放入熟悉的方括弧,如下執行個體:
#!/usr/bin/python dict = { ' Name ' : ' Zara ' , ' Age ' : 7 , ' Class ' : ' First ' }; print " dict['Name']: " , dict [ ' Name ' ] ; print " dict['Age']: " , dict [ ' Age ' ] ;
以上執行個體輸出結果:
dict['Name']: Zara
dict['Age']: 7
我們如果用字典裡沒有的鍵通路資料,會輸出錯誤如下:
#!/usr/bin/python dict = { ' Name ' : ' Zara ' , ' Age ' : 7 , ' Class ' : ' First ' }; print " dict['Alice']: " , dict [ ' Alice ' ] ;
以上執行個體輸出結果:
dict['Alice']:
Traceback (most recent call last):
File "test.py", line 5, in <module>
print "dict['Alice']: ", dict['Alice'];
KeyError: 'Alice'
然後我們就要來修改字典了,先來看一個向字典添加新内容的方法是增加新的鍵/值對,修改或删除已有鍵/值對的執行個體:
#!/usr/bin/python dict = { ' Name ' : ' Zara ' , ' Age ' : 7 , ' Class ' : ' First ' }; dict [ ' Age ' ] = 8 ; # update existing entry dict [ ' School ' ] = " DPS School " ; # Add new entry print " dict['Age']: " , dict [ ' Age ' ] ; print " dict['School']: " , dict [ ' School ' ] ;
以上執行個體輸出結果:
dict['Age']: 8
dict['School']: DPS School
我們再來嘗試删除字典中的元素。能删單一的元素也能清空字典,清空隻需一項操作。顯示删除一個字典用del指令,來看一個簡單的執行個體:
#!/usr/bin/python # -*- coding: UTF-8 -*- dict = { ' Name ' : ' Zara ' , ' Age ' : 7 , ' Class ' : ' First ' }; del dict [ ' Name ' ] ; # 删除鍵是'Name'的條目 dict . clear ( ) ; # 清空詞典所有條目 del dict ; # 删除詞典 print " dict['Age']: " , dict [ ' Age ' ] ; print " dict['School']: " , dict [ ' School ' ] ;
但這會引發一個異常,因為用del後字典不再存在:
dict['Age']:
Traceback (most recent call last):
File "test.py", line 8, in <module>
print "dict['Age']: ", dict['Age'];
TypeError: 'type' object is unsubscriptable
到這裡呢,我們再來看一下字典鍵的特性。首先,字典值可以沒有限制地取任何python對象,既可以是标準的對象,也可以是使用者定義的,但鍵不行。兩個重要的點需要記,1)不允許同一個鍵出現兩次。建立時如果同一個鍵被指派兩次,後一個值會被記住,如下執行個體:
#!/usr/bin/python dict = { ' Name ' : ' Zara ' , ' Age ' : 7 , ' Name ' : ' Manni ' }; print " dict['Name']: " , dict [ ' Name ' ] ;
以上執行個體輸出結果:
dict['Name']: Manni
2)鍵必須不可變,是以可以用數字,字元串或元組充當,是以用清單就不行,如下執行個體:
#!/usr/bin/python dict = { [ ' Name ' ] : ' Zara ' , ' Age ' : 7 }; print " dict['Name']: " , dict [ ' Name ' ] ;
以上執行個體輸出結果:
Traceback (most recent call last):
File "test.py", line 3, in <module>
dict = {['Name']: 'Zara', 'Age': 7};
TypeError: list objects are unhashable
我們最後來看兩個表單,首先是Python字典包含的内置函數:
序号 | 函數及描述 |
---|---|
1 | cmp(dict1, dict2) 比較兩個字典元素。 |
2 | len(dict) 計算字典元素個數,即鍵的總數。 |
3 | str(dict) 輸出字典可列印的字元串表示。 |
4 | type(variable) 傳回輸入的變量類型,如果變量是字典就傳回字典類型。 |
然後就是Python字典包含的内置方法:
序号 | 函數及描述 |
---|---|
1 | dict.clear() 删除字典内所有元素 |
2 | dict.copy() 傳回一個字典的淺複制 |
3 | dict.fromkeys(seq[, val]) 建立一個新字典,以序列 seq 中元素做字典的鍵,val 為字典所有鍵對應的初始值 |
4 | dict.get(key, default=None) 傳回指定鍵的值,如果值不在字典中傳回default值 |
5 | dict.has_key(key) 如果鍵在字典dict裡傳回true,否則傳回false |
6 | dict.items() 以清單傳回可周遊的(鍵, 值) 元組數組 |
7 | dict.keys() 以清單傳回一個字典所有的鍵 |
8 | dict.setdefault(key, default=None) 和get()類似, 但如果鍵不存在于字典中,将會添加鍵并将值設為default |
9 | dict.update(dict2) 把字典dict2的鍵/值對更新到dict裡 |
10 | dict.values() 以清單傳回字典中的所有值 |
11 | pop(key[,default]) 删除字典給定鍵 key 所對應的值,傳回值為被删除的值。key值必須給出。否則,傳回default值。 |
12 | popitem() 随機傳回并删除字典中的一對鍵和值。 |
好啦,到這裡呢,就記錄完畢了。如果感覺不錯的話,請多多點贊支援哦。。。