【Python】資料結構之字典

楊奇龍發表於2013-06-15
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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章