Python數據結構之三——dict(字典)

  Python版本:3.6.2  操做系統:Windows  做者:SmallWZQ算法

  知識源於生活。Python也是如此。數據結構

  提到字典,我首先想到的是數學大師——高斯。app

  爲什麼想起他呢?這主要是由於高斯算法嘛。計算1+2+3+...+100,通常人都會從1一直加到100,而高斯卻另闢蹊徑,找到規律,從而發現「高斯算法」。高斯算法極大地提升運算效率。對於Python中的字典,它與高斯算法殊途同歸,一樣能提升鍵值對的查找效率。spa

  映射(mapping):經過名字來引用值的數據結構。操作系統

  字典是Python中惟一內建的映射類型。字典的鍵值對(Key-Values),鍵是不可變的,能夠爲字符串、數字(int、float......)、元組等等。code

  字典中的鍵是惟一的,而值卻能夠相同。blog

  Python格式以下:內存

1 phone = {'Jack':'0571','James':'7856','Paul':'2364'} #大括號,且鍵值對之間用冒號(:)隔開

   注:對於上面的代碼,可能有讀者會疑問:爲何用字符串表示電話號碼呢?字符串

  主要是考慮以「0」開頭的電話號碼。定義電話號碼時,以「0」開頭會顯示錯誤(Error)。所以,爲了考慮周全,字典中電話號碼應表示爲數字字符串,而不是整數。get

  

              圖1 電話號碼錯誤示例

  1.建立字典和訪問元素

  建立方式以下:

d = {'a':'97','b':'98','c':'99','c':'101'}
print(d)
d['a']
'97'

  注:字典中即便鍵相同,也只會輸出其中一個(若Key相同,後面的值(Value)會把前面的覆蓋掉)。

  2.添加元素

  字典沒有insert()方法,但依然可以添加元素。

d = {'a':'98','b':'99','c':'100'}
d['d'] = '101'
print(d)

  3.刪除元素

  字典中刪除元素,使用pop()方法。pop()方法用於得到對應於給定鍵的值,並將該鍵值對從字典中移除。

d ={‘a':'97','b':'98','c':'99'}
d.pop('b')
'98'
print(d)
{‘a':'97','c':'99'}

  注:除了pop()方法,還可使用del方法

  4.修改元素

  字典中的元素如何修改呢?很簡單,直接經過Key修改Value。

d ={‘a':'97','b':'98','c':'99'}
d['b'] = '200'
print(d['b'])
'200'
print(d)
d ={‘a':'97','b':'200','c':'99'}

  5.查找元素

  字典中查找元素與修改元素相似,也是經過Key來查找字典中的Value。

d ={‘a':'97','b':'98','c':'99'}
d['b']
'98'
d['c']
'99'

  若是字典中沒有該Key時,dict會報錯。

  

                         圖2 錯誤提示(KeyError)

  如何避免Key不存在的錯誤呢?

  1.經過k in d,判斷Key是否在dict中: 

‘a’ in d
True
'f' in d
False

  2.get()方法用於更寬鬆的訪問字典項的方法。若是Key不存在,使用get()沒有任何異常,僅僅返回None值:

  

                    圖3 get()方法示例

  注:經過d.get('f','120')並不能往字典d ={}中添加鍵-值對

  6.字典基本操做總結

   ♦len(d):返回d中鍵-值對的數量;

   ♦d[k]:返回關聯到鍵K上的值(Value);

   ♦d[k] = V:將值V關聯到將K上;

   ♦del d[k]:刪除鍵爲K的項;

   ♦K in d:檢查d中是否含有鍵K的元素;

   ♦鍵K類型:字符串、數字或元組,符合條件的不可變類型都可;

   ♦字典格式化字符串:%(Jack)s %(phone)。【其中Jack爲鍵,而phone爲dict{}】

  其實,元組不必定能夠用於dict的鍵(Key)

d ={‘a':'97','b':'98','c':'99'}
d[(1,2,3,4,5,6)] = '121'
print(d)
d ={‘a':'97','b':'98','c':'99',(1,2,3,4,5,6):'121'}
d[(1,2,[1,2,3])] = '188'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

  注:若是元組用於鍵,元組中不能含有可變內容list,不然編譯錯誤。

  字典總結

  1.字典中元素必須以鍵值對的形式出現;

  2.字典中的鍵必須是不可變的,能夠是字符串、數字以及元組,而且沒法修改;

  3.Key是惟一的,不可重複,而Value能夠重複;

  4.字典查找和插入元素極快,並不會隨着Key增長而減慢;

  5.字典佔用內存大,以空間換取時間;

  6.特別地,當tuple做爲字典中的鍵(Key)時,tuple中不能包含list,不然編譯錯誤

相關文章
相關標籤/搜索