前兩節介紹了Python列表和字符串的相關用法,這兩種數據類型都是有序的數據類型,因此它們能夠經過索引來訪問內部元素。本文將記錄一種無序的數據類型——字典!python
字典是無序的,列表和字符串是有序的linux
字典使用 key-value(鍵-值對)存儲,列表和字符串爲單元素存儲ios
字典的key值惟一,列表和字符串元素能夠相同ubuntu
字典的訪問速度遠高於列表和字符串的訪問速度windows
字典一般被用做存儲,列表和字符串經常使用來工做centos
在介紹其詳細用法以前,先來看看其包含的方法:ssh
In [1]: dir(dict) Out[1]: ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
從上面能夠看到,字典的方法屈指可數,麻雀雖小,五臟俱全啊spa
經過前文可知,字典是被一對花闊號括起來,內部元素採用 key-value 形式存儲的數據類型:code
普通初始化:orm
In [5]: systems = {'windows':10,'linux':'centos 6'} # 初始化一個字典,含有不一樣的數據類型 In [6]: systems = {'windows':10,'windows':8} # 字典的 key 值必須惟一,雖然重複時不報錯,但訪問時有問題 In [7]: systems['windows'] # 訪問Windows時,隨機給出一個值,這是不但願的,因此在建立字典時嚴格控制 key 的惟一 Out[7]: 8 In [9]: systems = {'windows':10,'linux':{'centos': 6}} # 字典能夠嵌套
高級初始化:dict.setdefault()
In [24]: systems # 以前存在的字典 Out[24]: {'linux': 'centos 6', 'ubuntu': 17, 'windows': 10} In [27]: systems.setdefault('ios',12) # 使用dict.setdefault()方法傳入新的 key-value:'ios':12 Out[27]: 12 In [28]: systems Out[28]: {'ios': 12, 'linux': 'centos 6', 'ubuntu': 17, 'windows': 10} In [29]: systems.setdefault('linux','centos 7') # setdefault方法對於字典裏沒有的key是新建,對於已經存在的key來講,則不會改變原有的值,而且返回原有的值 Out[29]: 'centos 6' In [30]: systems # 能夠看到已經存在的 'linux'的值並無被改變 Out[30]: {'ios': 12, 'linux': 'centos 6', 'ubuntu': 17, 'windows': 10} # 這種方法極爲適合於未知的字典
經過列表初始化:dict.formkeys()
In [59]: systems={} # 建立一個空字典 In [61]: systems.fromkeys(['linux','windows','ios'],['centos 6',10,12]) Out[61]: {'ios': ['centos 6', 10, 12], 'linux': ['centos 6', 10, 12], 'windows': ['centos 6', 10, 12]} # 能夠看到,這種方法超級坑,並非想象中的一一對應,而是一對多
經過字典名加一對方括號 dict[key] 來訪問字典的元素:
In [11]: systems = {'windows':10,'linux':'centos 6'} In [12]: systems['windows'] Out[12]: 10 In [13]: systems['linux'] Out[13]: 'centos 6'
循環訪問:字典自己是能夠循環的:
In [14]: systems Out[14]: {'linux': 'centos 6', 'windows': 10} In [15]: for key in systems: # 能夠看到字典默認循環 key ...: print(key) ...: linux windows In [16]: for key in systems: # 能夠經過方括號的訪問方式來獲得value值 ...: value = systems[key] ...: print(key,value) ...: linux centos 6 windows 10
更高級的循環訪問:使用 dict.items()
In [17]: for key,value in systems.items(): # 使用字典方法items()來循環遍歷字典,可是會把字典轉換爲列表,仍是少用哇 ...: print(key,value) ...: linux centos 6 windows 10
字典的增長:dict[新的key] = 新的value
In [19]: systems Out[19]: {'linux': 'centos 6', 'windows': 10} In [20]: systems['ubuntu'] = 16 # 直接增長便可 In [21]: systems Out[21]: {'linux': 'centos 6', 'ubuntu': 16, 'windows': 10} # 經過上面代碼明顯發現字典是無序的
字典的修改:dict[存在的key] = 新的value
In [21]: systems Out[21]: {'linux': 'centos 6', 'ubuntu': 16, 'windows': 10} In [22]: systems['ubuntu'] = 17 # 直接改就行 In [23]: systems Out[23]: {'linux': 'centos 6', 'ubuntu': 17, 'windows': 10}
字典的更新:dict1.updata(dict2)
In [31]: systems1 = {'ios':12,'windows':8} In [34]: systems2 = {'linux':'centos 6','windows':10} In [35]: systems1.update(systems2) # 使用systems2更新systems1 In [36]: systems1 Out[36]: {'ios': 12, 'linux': 'centos 6', 'windows': 10}
刪除指定鍵值對方法1:dict.pop(key)
In [37]: systems Out[37]: {'ios': 12, 'linux': 'centos 6', 'ubuntu': 17, 'windows': 10} In [38]: systems.pop('ios') # 刪除'ios',而且返回其值 Out[38]: 12 In [39]: systems Out[39]: {'linux': 'centos 6', 'ubuntu': 17, 'windows': 10}
刪除指定鍵值對方法2:使用del
In [39]: systems Out[39]: {'linux': 'centos 6', 'ubuntu': 17, 'windows': 10} In [40]: del systems['linux'] In [41]: systems Out[41]: {'ubuntu': 17, 'windows': 10}
隨機刪除鍵值對:dict.popitem()
In [41]: systems Out[41]: {'ubuntu': 17, 'windows': 10} In [42]: systems.popitem() # 隨機刪除鍵值對,並返回此鍵值對 Out[42]: ('windows', 10) In [43]: systems Out[43]: {'ubuntu': 17}
清空字典元素:dict.clear()
In [64]: systems = {'linux':'centos 6','windows':10} In [65]: systems.clear() In [66]: systems # 字典仍然存在,只是變成了一個空字典 Out[66]: {}
使用關鍵字 in :
In [46]: systems = {'linux':'centos 6','windows':10} In [47]: 'linux' in systems Out[47]: True In [48]: 'iso' in systems Out[48]: False
使用訪問查找:
In [49]: systems Out[49]: {'linux': 'centos 6', 'windows': 10} In [50]: systems['linux'] # 訪問鍵值對,有返回值證實存在 Out[50]: 'centos 6' In [51]: systmes['ios'] # 拋出異常,證實沒有此元素 --------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-51-e5e3f5004036> in <module> ----> 1 systmes['ios'] KeyError: 'ios'
使用 dict.get(key) 查找:
In [52]: systems Out[52]: {'linux': 'centos 6', 'windows': 10} In [53]: systems.get('linux') # 查找'linux',有返回值,證實存在 Out[53]: 'centos 6' In [54]: systems.get('ios') # 沒有返回值,證實不存在 # 和訪問的區別就在於沒有此元素時,get方法不會報錯
統計key:dict.keys()
In [55]: systems Out[55]: {'linux': 'centos 6', 'windows': 10} In [56]: systems.keys() Out[56]: dict_keys(['linux', 'windows'])
統計value:dict.values()
In [57]: systems Out[57]: {'linux': 'centos 6', 'windows': 10} In [58]: systems.values() Out[58]: dict_values(['centos 6', 10])
請參考列表的拷貝,大同小異ㄟ( ▔, ▔ )ㄏ