【循序漸進學Python】4. Python中的序列——字典


字典是Python內建的六種序列之一。字典作為一種常用的數據結構,字典中的值沒有特定順序,每個值都對應於一個唯一的鍵。鍵可以是數字、字符串甚至是元組。

1. 創建和使用字典

Python中字典可以使用下面的語法來直接創建字典對象:

# ---coding: utf-8 ---
phonebook = {'1':'','2':'','3':'','4':'','5':''}

字典由多個鍵以及對應的值組成,每個鍵及其對應的值為一項。上面的示例中每個阿拉伯數字(key)對應其中文的數字(value)。

 

1.1 使用dict函數

除了使用上面的語法外,還可以通過dict函數將(key -> value)這樣形式的序列轉換為字典。

 1 # --- coding: utf-8 ---
 2 items = [('name','Gumby'),('age',42)]
 3 
 4 #使用dict函數
 5 dic = dict(items)
 6 
 7 # 輸出:{'age': 42, 'name': 'Gumby'}
 8 print dic
 9 
10 # 輸出:<type 'list'>,類型是一個列表
11 print type(items)
12 
13 # 輸出:<type 'dict'> 
14 print type(dic) 

 

1.2 字典的基本操作

由於字典也是序列的一種,所起它有很多操作(比如len和成員資格)都和序列類似:

  • len(d):返回d(字典對象)中項的數量;
  • d[key]:返回這個key對應的value;
  • d[key] = v:將值v映射到key值為k的項;
  • key in did:檢查d中是否包含鍵為k的項;

字典和列表雖然都屬於Python內建的序列,但是二者有很大的區別

1.鍵類型:字典的鍵只能是不可變類型(比如:整型、字符串、元組、浮點型等)。

2.自動添加:即使一個鍵在字典中不存在,也可以為其分配一個值。如下示例:

 1 # --- coding: utf-8 ---
 2 
 3 # 聲明一個空列表對象
 4 x = [] 
 5 
 6 # IndexError:list assignment index out of range
 7 # 列表只能夠為其索引范圍內的元素賦值
 8 x[42] = 'foobar' 
 9 
10 # 將x的引用變為一個空字典對象
11 x = {} 
12 x[42] = 'Foobar'
13 
14 # 輸出:{42: 'Foobar'}
15 print x

 

3.成員資格:表達式key in dic(dic是一個字典)是根據鍵來查找,而不是值。因為鍵是唯一的,而不同鍵的值卻可以相同。如下:

 1 people = {
 2     'Alice':{
 3         'phone':'2341',
 4         'addr':'Foo drive 23'
 5     },
 6 
 7     'Beth':{
 8         'phone':'1213',
 9         'addr':'Baz avenue 90'
10     },
11 
12     'Ceil':{
13         'phone':'3219',
14         'addr':'Baz avenue 90'
15     }
16 }
17 
18 # output: True
19 print 'Ceil' in people  

 

1.3 字典的格式化字符串

字典還有一個有用的地方就可以用來進行格式化字符串,相對於使用元組來說具備更好的可讀性。使用字典來格式化字符串很簡單,只需要在轉換說明符(%)后面加上一個圓括號,圓括號里面是字典的鍵,接着后面是其他的說明元素,如下所示:

1 phonebook = {
2     'Beth':'1290','Alice':'1239','Ceil':'3258'
3 }
4 
5 #output: Alice's phone number is 1239.
6 print "Alice's phone number is %(Alice)s." % phonebook

 

1.4 字典常用函數

Python為字典提供了很多的函數,更多可以參考Python文檔中dict的API:Dictionaries,下面例舉了幾個最常用的函數。


1.4.1 clear

Clear函數會清除字典中所有的項。

1 # --- coding: utf-8 ---
2 
3 # clear函數
4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
5 
6 print pro_Language # 輸出: {'C#': 'microsoft', 'Java': 'Oracle'}
7 print pro_Language.clear() # 輸出:None
8 print pro_Language # 輸出:{}

 


1.4.2 copy

Copy函數會返回一個具有相同key-value對的新字典(淺復制)

1 # --- coding: utf-8 ---
2 
3 # copy函數
4 pro_Language = {"C#":"microsoft","Java":"Oracle"}  
5 copy_Pro_Language = pro_Language.copy()
6 
7 # 輸出: {'C#': 'microsoft', 'Java': 'Oracle'}
8 print copy_Pro_Language

 


1.4.3 fromkeys

fromkeys函數使用給定的鍵建立新的字典,每個鍵默認對應的值為None。

1 # --- coding: utf-8 ---
2 
3 # fromkeys函數
4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
5 
6 print {}.fromkeys(['C#','Java']) # 輸出:{'C#': None, 'Java': None}
7 print dict.fromkeys(['C#','Java']) # 輸出:{'C#': None, 'Java': None}

 


1.4.4 get

get函數可以訪問字典中的項,如果不存在,返回一個None(或者自定義一個默認值)

1 # --- coding: utf-8 ---
2 
3 # get函數
4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
5 
6 print pro_Language.get('python') # 輸出:None
7 print pro_Language.get('python','N/A') #輸出:N/A

 


1.4.5 has_key

has_key函數可以檢測字典中是否含有給出的鍵。

1 # --- coding: utf-8 ---
2 
3 # has_key函數
4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
5 print pro_Language.has_key('python') # 輸出:False

 


1.4.6 items和iteritems

items函數將所有的字典項以列表方式返回。iteritems函數作用和items類似,但是會返回一個迭代器對象而不是一個列表

 1 # --- coding: utf-8 ---
 2 
 3 # items/iteritems 函數
 4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
 5 
 6 # 輸出:[('C#', 'microsoft'), ('Java', 'Oracle')]
 7 print pro_Language.items() 
 8 
 9 # 輸出:<dictionary-itemiterator object at 0x0000000002659BD8>
10 print pro_Language.iteritems() 

 


1.4.7 keys和iterkeys

keys函數將字段中的鍵以列表的形式返回,而iterkeys則返回針對鍵的迭代器

1 # --- coding: utf-8 ---
2 
3 # keys/iterkeys 函數
4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
5 
6 # 輸出:['C#', 'Java']
7 print pro_Language.keys()
8 # 輸出:<dictionary-keyiterator object at 0x0000000002659BD8>
9 print pro_Language.iterkeys()

 


1.4.8 values和itervalues

values函數將字段中的值以列表的形式返回,而itervalues則返回針對值的迭代器

1 # --- coding: utf-8 ---
2 
3 # values/itervalues 函數
4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
5 # 輸出:['microsoft', 'Oracle']
6 print pro_Language.values()
7 # 輸出:<dictionary-valueiterator object at 0x0000000002529BD8>
8 print pro_Language.itervalues()

 


1.4.9 pop

pop函數用來獲得對應給定鍵的值,然后將這個項(key-value)從字典中刪除

1 # --- coding: utf-8 ---
2 
3 # pop 函數
4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
5 print pro_Language.pop('C#') # 返回:microsoft
6 print pro_Language # 輸出:{'Java': 'Oracle'}

 


1.4.10 popitem

popitem函數會獲取一個隨機的項,然后刪除。

1 # --- coding: utf-8 ---
2 
3 # popitem 函數
4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
5 print pro_Language.popitem() # 返回:('C#', 'microsoft')
6 print pro_Language # 輸出:{'Java': 'Oracle'}

 


1.4.11 setdefault

setdefault函數和set函數類似,但setdefault函數還能在字典中不包含給定鍵的情況下,設定相應的值。

1 # --- coding: utf-8 ---
2 
3 # setdefault 函數
4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
5 pro_Language.setdefault('Python',"N/A")
6 
7 # 輸出:{'C#': 'microsoft', 'Python': 'N/A', 'Java': 'Oracle'}
8 print pro_Language

 


1.4.12 update

update函數可以利用一個字典對象更新另一個字典對象,提供字典中的項會添加到舊的字典中,如果有相同的鍵則會覆蓋

 1 # --- coding: utf-8 ---
 2 
 3 # update
 4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
 5 script_Language = {'Java':'Sun','python':'Python Software Foundation'}
 6 
 7 pro_Language.update(script_Language)
 8 
 9 # 輸出:{'C#': 'microsoft', 'python': 'Python Software Foundation', 'Java': 'Sun'}
10 print pro_Language

 

參考資料&進一步閱讀

《Python基礎教程》

Learn Python The Hard Way, 2nd Edition

http://www.pythondoc.com/pythontutorial27/index.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM