第三章. 原生数据类型

我们马上就会回到您的第一个 Python 程序。但首先,我们需要稍微绕一下,因为您需要了解字典、元组和列表(我的天哪!)。如果您是 Perl 黑客,您可能可以跳过关于字典和列表的部分,但您仍然应该注意元组。

3.1. 字典介绍

Python 的内置数据类型之一是字典,它定义了键和值之间的一对一关系。

Note
Python 中的字典就像 Perl 中的哈希。在 Perl 中,存储哈希的变量始终以 % 字符开头。在 Python 中,变量可以任意命名,Python 会在内部跟踪数据类型。
Note
Python 中的字典就像 JavaHashtable 类的一个实例。
Note
Python 中的字典就像 Visual BasicScripting.Dictionary 对象的一个实例。

3.1.1. 定义字典

示例 3.1. 定义字典

>>> d = {"server":"mpilgrim", "database":"master"} 1
>>> d
{'server': 'mpilgrim', 'database': 'master'}
>>> d["server"]                                    2
'mpilgrim'
>>> d["database"]                                  3
'master'
>>> d["mpilgrim"]                                  4
Traceback (innermost last):
  File "<interactive input>", line 1, in ?
KeyError: mpilgrim
1 首先,创建一个包含两个元素的新字典,并将其赋值给变量 d。每个元素都是一个键值对,整个元素集用花括号括起来。
2 'server' 是一个键,它关联的值通过 d["server"] 引用,值为 'mpilgrim'
3 'database' 是一个键,它关联的值通过 d["database"] 引用,值为 'master'
4 您可以通过键获取值,但不能通过值获取键。所以 d["server"]'mpilgrim',但 d["mpilgrim"] 会引发异常,因为 'mpilgrim' 不是键。

3.1.2. 修改字典

示例 3.2. 修改字典

>>> d
{'server': 'mpilgrim', 'database': 'master'}
>>> d["database"] = "pubs" 1
>>> d
{'server': 'mpilgrim', 'database': 'pubs'}
>>> d["uid"] = "sa"        2
>>> d
{'server': 'mpilgrim', 'uid': 'sa', 'database': 'pubs'}
1 字典中不能有重复的键。将值赋给现有键会擦除旧值。
2 您可以随时添加新的键值对。此语法与修改现有值相同。(是的,这会在您认为自己在添加新值但实际上只是反复修改相同值时让您感到烦恼,因为您的键没有按照您的想法进行更改。)

请注意,新元素(键 'uid',值 'sa')似乎位于中间。事实上,在第一个例子中,元素按顺序出现只是一个巧合;现在它们看起来无序也只是一个巧合。

Note
字典没有元素之间顺序的概念。说元素“无序”是不正确的;它们只是无序的。这是一个重要的区别,当您想要以特定的、可重复的顺序(例如按键的字母顺序)访问字典的元素时,这会让您感到烦恼。有一些方法可以做到这一点,但它们不是内置在字典中的。

使用字典时,需要注意字典键区分大小写。

示例 3.3. 字典键区分大小写

>>> d = {}
>>> d["key"] = "value"
>>> d["key"] = "other value" 1
>>> d
{'key': 'other value'}
>>> d["Key"] = "third value" 2
>>> d
{'Key': 'third value', 'key': 'other value'}
1 将值赋给现有的字典键只会将旧值替换为新值。
2 这不是将值赋给现有的字典键,因为 Python 中的字符串区分大小写,所以 'key''Key' 不同。这会在字典中创建一个新的键/值对;它在您看来可能很相似,但就 Python 而言,它是完全不同的。

示例 3.4. 在字典中混合数据类型

>>> d
{'server': 'mpilgrim', 'uid': 'sa', 'database': 'pubs'}
>>> d["retrycount"] = 3 1
>>> d
{'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 'retrycount': 3}
>>> d[42] = "douglas"   2
>>> d
{'server': 'mpilgrim', 'uid': 'sa', 'database': 'master',
42: 'douglas', 'retrycount': 3}
1 字典不只是用于字符串。字典值可以是任何数据类型,包括字符串、整数、对象,甚至是其他字典。在单个字典中,值不需要都是相同的类型;您可以根据需要混合和匹配。
2 字典键的限制更多,但它们可以是字符串、整数和其他几种类型。您还可以在字典中混合和匹配键数据类型。

3.1.3. 从字典中删除项目

示例 3.5. 从字典中删除项目

>>> d
{'server': 'mpilgrim', 'uid': 'sa', 'database': 'master',
42: 'douglas', 'retrycount': 3}
>>> del d[42] 1
>>> d
{'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 'retrycount': 3}
>>> d.clear() 2
>>> d
{}
1 del 允许您按键从字典中删除单个项目。
2 clear 从字典中删除所有项目。请注意,一组空花括号表示没有任何项目的字典。