logo

Thursday 24th of May 2012

廣告

廣告贊助商

字典(Dictionary) PDF 列印 E-mail
作者是 Victor   
週三, 11 二月 2009 21:09

什麼是字典(Dictionary)

在Python中,什麼是字典? 它是Python的映射物件,而什麼是映射(Mapping)呢? 簡單的來說,就是鍵(Key)值(Value)的關係,想像一下你身為班長,你手中有張點名表,我們就可以把它想做是映射,以人名當鍵,學號當值,我們可以有下列的關係

張三 -> D9512345
李四 -> D9556678
王五 -> D9677880

所以當我查詢王五,我得到的是D9512345的值,這樣的概念就是映射,而Python的字典就是實作這樣概念的容器,以下我們介紹此物件的用法

d = {鍵: 值, 鍵: 值, ....}

由鍵值物件來對應到資料物件,既然是物件,只要是物件,符合一定條件就能夠當做"鍵值物件",只有"不可改變"物件可以當鍵值,例如字 串、整數等等因為是"不可改變",所以可以當鍵值,而不可當鍵值的,有串列、字典等等,因為這些是"可改變"的物件。

而如上面所說的,字典可以改變,也就是說創造Dictionary之後還可以改變物件的資料,以下是新增鍵值和資料的方式:

d[鍵] = 值

取得資料的方式也是一樣

d[鍵]

現在就讓我們來示範如何使用字典。

# 建立一個Dictionary
friendMap = {'John': 'My classmate', 'Tom': 'Who he is?', '1900': 'A great pianist'}

# 印出John對應的資料
print friendMap['John']

# 改變Tom對應的值
friendMap['Tom'] = "John's brother"

# 印出Tom對應的資料
print friendMap['Tom']

# 新增Victor對應到資料
friendMap['Victor'] = "Owner of this site"

# 印出friendMap
print friendMap

映射物件的操作

在介紹操作之前,有一點值得注意的是,字典不是有序的序列,你新增任一個鍵值對應到資料,不一定會出哪一個特定的位置,因此不是有序的,相同地,只要符合"映射" (Mapping)的物件,都可以用同樣的方法操作,只要該物件有實作這些功能,現在就讓我們來介紹"映射物件"的操作。

Col 01 Col 11
len(a) 回傳a的元素個數
a[k] 取得鍵k的對應值
a[k] = v 設定鍵k的對應值
del a[k] 從映設物件中刪除鍵k的元素
a.clear() 刪除所有元素
a.copy() 複製一份映射物件(shallow copy)
k in a
k鍵值是否存在於a
k not in a k鍵值是否不存在於a
a.has_key(k) 效果和k in a一樣,鍵值是否存在於a
a.items() 傳以(鍵, 對應值)為元素的List
a.keys() 回傳以鍵為元素的串列
a.update([b]) 以b此映射物件更新a映射物件,也就是同鍵值會被覆蓋,新鍵值會被建立
a.fromkeys(seq[, value]) 建立一個新的字典以seq此序列的元素為鍵,而對應值全設為value
a.values() 回傳以資料值為元素的串列
a.get(k[, x]) 取得鍵k的對應值,如果不存在則回傳x
a.setdefault(k[, x])
如果鍵k存在,則回傳k的對應值,否則不存在的話設定a[k] = x,且回傳x
a.pop(k[, x]) 刪除鍵為k的元素並回傳,如果不存在則回傳x
a.popitem() 以(鍵值, 對應值)回傳任意一個元素
a.iteritems() 回傳一個(鍵值, 對應值)的iterator
a.iterkeys() 回傳一個指的iterator
a.itervalues() 回傳一個對應值的iterator

以下讓我們示範如何操作Dictionary:

# 建立Dictionary
a = {'a': 123, 'b': 456}

# 回傳a是否有'b'此鍵值
print 'b' in a

# 設定'abc'鍵值的對應值為7788
a['abc'] = 7788

# 印出鍵值List
print a.keys()

# 印出對應值List
print a.values()

# 印出(鍵值, 對應值)的List
print a.items()

# 取得鍵值'x'的對應值,如果不存在回傳
# 'Nothing, but ghost and shallow'
print a.get('x', 'Nothing, but ghost and shallow')

# 如果'x'鍵值存在,則回傳對應值
# 否則設定'x'對應'Nothing, but ghost and shallow'
# 並且回傳對應值
print a.setdefault('x', 'Nothing, but ghost and shallow')

# 印出a
print a

# 鍵立一個新的Dictionary
b = {'abc': 'Suck', 'hello': 'world'}

# 以b來更新a
# 舊的abc會被覆蓋
# 並且建立'hello'對應'world'
a.update(b)

# 印出a
print a

最近更新在 週三, 11 二月 2009 21:46
 

核心是 Joomla!. Designed by: Free Joomla Theme, whois protect. Valid XHTML and CSS.