# 字典
字典類似于你通過聯系人名字查找地址和聯系人詳細情況的地址簿,即,我們把**鍵**(名字)和**值**(詳細情況)聯系在一起。注意,鍵必須是唯一的,就像如果有兩個人恰巧同名的話,你無法找到正確的信息。
注意,你只能使用不可變的對象(比如字符串)來作為字典的鍵,但是你可以不可變或可變的對象作為字典的值。基本說來就是,你應該只使用簡單的對象作為鍵。
鍵值對在字典中以這樣的方式標記:`d = {key1 : value1, key2 : value2 }`。注意它們的鍵/值對用冒號分割,而各個對用逗號分割,所有這些都包括在花括號中。
記住字典中的鍵/值對是沒有順序的。如果你想要一個特定的順序,那么你應該在使用前自己對它們排序。
字典是`dict`類的實例/對象。
```
#!/usr/bin/python
# Filename: using_dict.py
# 'ab' is short for 'a'ddress'b'ook
ab = {???????'Swaroop'???: 'swaroopch@byteofpython.info',
?????????????'Larry'?????: 'larry@wall.org',
?????????????'Matsumoto'?: 'matz@ruby-lang.org',
?????????????'Spammer'???: 'spammer@hotmail.com'
?????}
print "Swaroop's address is %s" % ab['Swaroop']
# Adding a key/value pair
ab['Guido'] = 'guido@python.org'
# Deleting a key/value pair
del ab['Spammer']
print '\nThere are %d contacts in the address-book\n' % len(ab)
for name, address in ab.items():
????print 'Contact %s at %s' % (name, address)
if 'Guido' in ab: # OR ab.has_key('Guido')
????print "\nGuido's address is %s" % ab['Guido']
```
(源文件:[code/using_dict.py](code/using_dict.py))
## 輸出
```
$ python using_dict.py
Swaroop's address is swaroopch@byteofpython.info
There are 4 contacts in the address-book
Contact Swaroop at swaroopch@byteofpython.info
Contact Matsumoto at matz@ruby-lang.org
Contact Larry at larry@wall.org
Contact Guido at guido@python.org
Guido's address is guido@python.org
```
## 它如何工作
我們使用已經介紹過的標記創建了字典`ab`。然后我們使用在列表和元組章節中已經討論過的索引操作符來指定鍵,從而使用鍵/值對。我們可以看到字典的語法同樣十分簡單。
我們可以使用索引操作符來尋址一個鍵并為它賦值,這樣就增加了一個新的鍵/值對,就像在上面的例子中我們對Guido所做的一樣。
我們可以使用我們的老朋友——`del`語句來刪除鍵/值對。我們只需要指明字典和用索引操作符指明要刪除的鍵,然后把它們傳遞給`del`語句就可以了。執行這個操作的時候,我們無需知道那個鍵所對應的值。
接下來,我們使用字典的`items`方法,來使用字典中的每個鍵/值對。這會返回一個元組的列表,其中每個元組都包含一對項目——鍵與對應的值。我們抓取這個對,然后分別賦給`for..in`循環中的變量`name`和`address`然后在for-塊中打印這些值。
我們可以使用`in`操作符來檢驗一個鍵/值對是否存在,或者使用`dict`類的`has_key`方法。你可以使用`help(dict)`來查看`dict`類的完整方法列表。
**關鍵字參數與字典。**如果換一個角度看待你在函數中使用的關鍵字參數的話,你已經使用了字典了!只需想一下——你在函數定義的參數列表中使用的鍵/值對。當你在函數中使用變量的時候,它只不過是使用一個字典的鍵(這在編譯器設計的術語中被稱作 符號表 )。
- 版權信息
- 前言
- 本書的由來
- 本書目前的狀況
- 約定條款
- 反饋
- 值得思考的一些東西
- 第1章 介紹
- Python的特色
- 為什么不使用Perl?
- 程序員的話
- 第2章 安裝Python
- Windows?用戶
- 概括
- 第3章 最初的步驟
- 使用帶提示符的解釋器
- 挑選一個編輯器
- 使用源文件
- 可執行的Python程序
- 獲取幫助
- 概括
- 第4章 基本概念
- 數
- 字符串
- 變量
- 標識符的命名
- 數據類型
- 對象
- 邏輯行與物理行
- 縮進
- 概括
- 第5章 運算符與表達式
- 運算符
- 運算符優先級
- 表達式
- 概括
- 第6章 控制流
- if語句
- while語句
- for循環
- break語句
- continue語句
- 概括
- 第7章 函數
- 函數形參
- 局部變量
- 默認參數值
- 關鍵參數
- return語句
- DocStrings
- 概括
- 第8章 模塊
- 字節編譯的.pyc文件
- from..import語句
- 模塊的name
- 制造你自己的模塊
- dir()函數
- 概括
- 第9章 數據結構
- 列表
- 元組
- 字典
- 序列
- 參考
- 更多字符串的內容
- 概括
- 第10章 解決問題——編寫一個Python腳本
- 解決方案
- 軟件開發過程
- 概括
- 第11章 面向對象的編程
- self
- 類
- 對象的方法
- __init__方法
- 類與對象的方法
- 繼承
- 概括
- 第12章 輸入/輸出
- 儲存器
- 概括
- 第13章 異常
- try..except
- 引發異常
- try..finally
- 概括
- 第14章 Python標準庫
- sys模塊
- os模塊
- 概括
- 第15章 更多Python的內容
- 單語句塊
- 列表綜合
- 在函數中接收元組和列表
- lambda形式
- exec和eval語句
- assert語句
- repr函數
- 概括
- 第16章 接下來學習什么?
- 探索更多內容
- 概括
- 附錄A 自由/開放源碼軟件(FLOSS)
- 附錄B 關于本書
- 關于作者
- 關于譯者
- 關于簡體中文譯本
- 附錄C 修訂記錄
- 術語表