<< >>

diveintopython.org |

Python for experienced programmers

## 1.7. 字典 101

有必要先讲些别的，因为你需要知道字典，序列(tuples)，和列表。如果你一个Perl高手，你大概可以忽略关于字典和列表那一块，但是你仍然应该对序列进行关心。

Python的内置数据类型之一是字典，它在关键字与值之间定义了一对一的关系。这一点就象Perl中的关联数组，Java中的 `Map` ，或VBScipt中的 `Scripting.Dictionary` 对象。

例 1.9. 定义一个字典

    >>> d = {"server":"mpilgrim", "database":"master"}
    >>> d
    {'server': 'mpilgrim', 'database': 'master'}
    >>> d["server"]
    'mpilgrim'
    >>> d["database"]
    'master'
    >>> d["mpilgrim"]
    Traceback (innermost last):
      File "<interactive input>", line 1, in ?
    KeyError: mpilgrim

| 首先，我们创建了一个拥有两个元素的新字典，并将其赋值给变量 `d`。每一个元素都是一个键-值对，整个元素集合用大括号括起来。
| `server` 是一个键字，它所关联的值为 `mpilgrim`，用 `d["server"]` 来引用。
| `database` 是一个键字，它所关联的值为 `master`，用 `d["database"]` 来引用。
| 你可以通过键字来得到值，但是不能通过值得到键字。所以 `d["server"]` 为 `mpilgrim`，但是使用 `d["mpilgrim"]` 会引发一个异常，因为 `mpilgrim` 不是一个键字。

例 1.10. 修改一个字典

    >>> d
    {'server': 'mpilgrim', 'database': 'master'}
    >>> d["database"] = "pubs"
    >>> d
    {'server': 'mpilgrim', 'database': 'pubs'}
    >>> d["uid"] = "sa"
    >>> d
    {'server': 'mpilgrim', 'uid': 'sa', 'database': 'pubs'}

| 不能在一个字典中有重复的键字。给一个存在的键字赋值会抹掉原来的值。
| 可以在任何时候加入新的键-值对。这种语法同修改存在的值一样。(是的，它可能某天会给你带来麻烦，你可能认为增加了新值，但实际上只是反复地修改了同样的值，因为你的键字没有按照你的想象改变。)

注意新的元素(键字为 `uid`，值为 `sa`)出现在字典中间。实际上，它只不过是一种巧合，在第一个例子中的元素看上去是有序的。现在它们看上去无序了则更是一种巧合。

字典没有元素顺序的概念。说元素顺序乱了是不正确的，它们只是简单的无序。这是一个重要的特性，它会在你想要以一种特定的，可重复的顺序(象以键字的字母表顺序)存取字典元素的时候骚扰你。有一些实现的方法，它们只是没有加到字典中去。

例 1.11. 在字典中混用数据类型

    >>> d
    {'server': 'mpilgrim', 'uid': 'sa', 'database': 'pubs'}
    >>> d["retrycount"] = 3
    >>> d
    {'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 'retrycount': 3}
    >>> d[42] = "douglas"
    >>> d
    {'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 42: 'douglas', 'retrycount': 3}

| 字典不是只用于字符串。字典的值可以是任意数据类型，包括字符串，整数，对象，或者甚至其它的字典。在一个单个字典里，字典的值并不需要全都是同一数据类型，可以根据需要混用和配匹。
| 字典的关键字要严格一些，但是它们可以是字符串，整数和几种其它的类型(后面还会谈到这一点)。也可以在一个字典中混用和配匹关键字。

例 1.12. 从字典中删除元素

    >>> d
    {'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 42: 'douglas', 'retrycount': 3}
    >>> del d[42]
    >>> d
    {'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 'retrycount': 3}
    >>> d.clear()
    >>> d
    {}

| `del` 允许你根据键字将单个元素从字典中删除。
| `clear` 会删除一个字典中所有元素。注意空的大括号所表示的集合说明一个字典没有元素。

进一步阅读 |

- How to Think Like a Computer Scientist 讲解了字典，并且展示了如何 用字典模拟稀疏矩阵。
- Python Knowledge Base 有很多 使用字典的例子代码。
- Python Library Reference 总结了 所有字典方法。

« 测试模块 | 列表 101 »