# 字典
字典类似于你通过联系人名字查找地址和联系人详细情况的地址簿,即,我们把**键**(名字)和**值**(详细情况)联系在一起。注意,键必须是唯一的,就像如果有两个人恰巧同名的话,你无法找到正确的信息。
注意,你只能使用不可变的对象(比如字符串)来作为字典的键,但是你可以不可变或可变的对象作为字典的值。基本说来就是,你应该只使用简单的对象作为键。
键值对在字典中以这样的方式标记:`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 修订记录
- 术语表