【Python】資料結構之字典
python 中的詞典結構:
d = { 'db1' : 'swaroopch@byteofpython.info',
'db2' : 'larry@wall.org',
'db3' : 'matz@ruby-lang.org',
'db4' : 'spammer@hotmail.com'
}
一 字典介紹
字典(dictionary)是除列表之外python之中最靈活的內建資料結構型別。列表是有序的物件結合,字典是無序的物件集合。兩者之間的區別在於:字典當中的元素是透過鍵來存取的,而不是透過偏移存取。
字典的主要屬性
a 透過鍵而不是偏移量來讀取
字典有時稱為關聯陣列或者雜湊表。它們透過鍵將一系列值聯絡起來,這樣就可以使用鍵從字典中取出一項。如果列表一樣可以使用索引操作從字典中獲取內容。
b 任意物件的無序集合
與列表不同,儲存在字典中的項並沒有特定的順序。實際上,Python將各項從左到右隨機排序,以便快速查詢。鍵提供了字典中項的象徵性位置(而非物理性的)。
c 可變,異構,任意巢狀
與列表相似,字典可以在原處增長或是縮短(無需生成一份複製),可以包含任何型別的物件,支援任意深度的巢狀,可以包含列表和其他字典等。
d 屬於可變對映型別
透過給索引賦值,字典可以在原處修改。但不支援用於字串和列表中的序列操作。因為字典是無序集合,根據固定順序進行操作是行不通的(例如合併和分片操作)。字典是唯一內建的對映型別(鍵對映到值得物件)。
e 物件引用表(雜湊表)
如果說列表是支援位置讀取物件的引用陣列,那麼字典就是支援鍵讀取無序物件的引用表。從本質上講,字典是作為雜湊表(支援快速檢索的資料結構)來實現的。一開始很小,並根據要求而增長。此外,Python採用最最佳化的雜湊演算法來尋找鍵,因此搜尋是很快速的。和列表一樣字典儲存的是物件引用。
二 詞典的賦值,更新 ,新增,刪除操作
>>> d = { 'db1' : 'swaroopch@byteofpython.info',
... 'db2' : 'larry@wall.org',
... 'db3' : 'matz@ruby-lang.org',
... 'db4' : 'spammer@hotmail.com'
... }
>>>
##增加新的值,如果存在則更新,不存在則新增
>>> d['Guido'] = 'guido@python.org'
##刪除詞典
>>> d
{'db1': 'swaroopch@byteofpython.info', 'db3': 'matz@ruby-lang.org', 'db2': 'larry@wall.org', 'db4': 'spammer@hotmail.com', 'Guido': 'guido@python.org'}
>>> del d['db4']
>>> d
{'db1': 'swaroopch@byteofpython.info', 'db3': 'matz@ruby-lang.org', 'db2': 'larry@wall.org', 'Guido': 'guido@python.org'}
三 詞典自帶常用函式
##字典長度
>>> print '\nThere are %d contacts in the address-book\n' % len(d)
There are 4 contacts in the address-book
##返回整個詞典的(key,value)元組
>>> d.items()
[('db1', 'swaroopch@byteofpython.info'), ('db3', 'matz@ruby-lang.org'), ('db2', 'larry@wall.org'), ('db4', 'spammer@hotmail.com')]
##字典的值檢視 返回值的列表
>>> d.values()
['swaroopch@byteofpython.info', 'matz@ruby-lang.org', 'larry@wall.org', 'spammer@hotmail.com']
##字典的鍵檢視 返回鍵的列表
>>> d.keys()
['db1', 'db3', 'db2', 'db4']
##建立並返回一個新字典,以seq 中的元素做該字典的鍵,val 做該字典中所有鍵對應的初始值(如果不提供此值,則預設為None)
>>> d4=dict.fromkeys(['high','weight'],0)
>>> d4
{'high': 0, 'weight': 0}
##d.has_key(key) 如果鍵(key)在字典中存在,返回True,否則返回False. 在Python2.2版本引入in 和not in 後,此方法幾乎已廢棄不用了,但仍提供一個
>>> d3.has_key('name')
True
>>> 'name' in d3
True
##合併資料
>>> d3.update(d2) d2合併到d3,d2沒有變化,d3變化。注意和字串,列表的合併操作”+“不同
>>> d2
{'name': 'yangyi', 'db1': 'swaroopch@byteofpython.info', 'db2': 'larry@wall.org', 'db3': 'matz@ruby-lang.org', 'db4': 'spammer@hotmail.com'}
>>> d3
{'name': 'yangyi', 'db1': 'swaroopch@byteofpython.info', 'db3': 'matz@ruby-lang.org', 'db2': 'larry@wall.org', 'db4': 'spammer@hotmail.com'}
>>>
##pop方法 從字典中刪除一個鍵並返回它的值 ,如果字典為空則報錯。
>>> d3
{'age': 23, 'name': {'last': 'yang', 'first': 'yi'}}
>>> d3.popitem()
('age', 23)
>>> d3
{'name': {'last': 'yang', 'first': 'yi'}}
>>> d3.popitem()
('name', {'last': 'yang', 'first': 'yi'})
>>> d3.popitem()
Traceback (most recent call last):
File "", line 1, in
KeyError: 'popitem(): dictionary is empty'
>>>
##清空字典
>>> d4
{'weight': 0}
>>> d4.clear()
>>> d4
{}
##遍歷 詞典:
>>> for dbname in d2.keys():
... print ' dbname ==> %s,email==> %s' %(dbname,d2[dbname])
...
dbname ==> db1,email==> swaroopch@byteofpython.info
dbname ==> db2,email==> larry@wall.org
dbname ==> db3,email==> matz@ruby-lang.org
dbname ==> db4,email==> spammer@hotmail.com
參考
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-764018/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python資料結構:字典Python資料結構
- python字典和結構化資料Python
- 資料結構-字典樹資料結構
- 資料結構之樹( 線段樹,字典樹)資料結構
- 從零學Python:第十五課-常用資料結構之字典Python資料結構
- js資料結構--字典(map)JS資料結構
- oracle結構梳理---資料字典Oracle
- python資料結構之棧Python資料結構
- Python 資料結構之DataframePython資料結構
- Redis資料結構—連結串列與字典的結構Redis資料結構
- Redis資料結構—連結串列與字典Redis資料結構
- 2.1.3 CDB中的資料字典結構
- 內建資料結構集合和字典資料結構
- python-資料型別之字典Python資料型別
- Python基礎之:Python的資料結構Python資料結構
- 1.1.4 python基本資料型別之字典Python資料型別
- 【Python_029】內建資料結構,列表 | 字典 | 集合 | 元組Python資料結構
- Python中幾種資料結構的整理,列表、字典、元組、集合Python資料結構
- 04 Javascript資料結構與演算法 之 字典和雜湊表JavaScript資料結構演算法
- 資料結構小白系列之資料結構概述資料結構
- python實用小技之資料結構Python資料結構
- Python基礎之os和資料結構Python資料結構
- python資料結構之圖的實現Python資料結構
- python 資料結構Python資料結構
- Python資料結構Python資料結構
- python 資料結構之單連結串列的實現Python資料結構
- 資料結構之「樹」資料結構
- 資料結構之「棧」資料結構
- 資料結構之——棧資料結構
- 資料結構之棧資料結構
- 資料結構之圖資料結構
- python之資料結構與演算法分析Python資料結構演算法
- 開心檔之Python3 資料結構Python資料結構
- 資料結構學習之樹結構資料結構
- MySQL 8.0 之資料字典MySql
- 資料結構之「連結串列」資料結構
- 資料結構之連結串列資料結構
- python資料結構setPython資料結構