
Dictionary 推导式的工作方式与列表推导式完全一样,但用于构建词典。语法只有细微的差异。以下示例解释需要了解的所有内容:
# dictionary.comprehensions.pyfrom string import ascii_lowercaselettermap = {c: k for k, c in enumerate(ascii_lowercase, 1)}如果打印 lettermap,将看到以下内容:
$ python dictionary.comprehensions.py{'a': 1, 'b': 2, ... 'y': 25, 'z': 26}在在前面的代码中,我们将枚举所有小写 ASCII 字母的序列(使用 enumerate 函数)。然后,将生成的字母/数字对作为键和值构建一个字典。请注意语法与熟悉的字典语法有何相似之处。
T这里也是另一种执行相同操作的方法:
lettermap = dict((c, k) for k, c in enumerate(ascii_lowercase, 1))在在这种情况下,将 generator 表达式(我们将在本章后面详细讨论这些)提供给 dict 构造函数。
Dictionaries 不允许重复的键,如以下示例所示:
# dictionary.comprehensions.duplicates.pyword = 'Hello'swaps = {c: c.swapcase() for c in word}print(swaps) # prints: {'H': 'h', 'e': 'E', 'l': 'L', 'o': 'O'}创建一个字典,其中字符串 'Hello' 的字母作为键和相同的字母,但大小写互换,作为值。请注意,只有一个 'l': 'L' 对。构造函数不会出错,它只是将重复项重新分配给最后一个值。让我们通过另一个示例来更清楚地说明这一点,该示例为每个键分配了它在字符串中的位置:
# dictionary.comprehensions.positions.pyword = 'Hello'positions = {c: k for k, c in enumerate(word)}print(positions) # prints: {'H': 0, 'e': 1, 'l': 3, 'o': 4}Notice 与字母 'l' 关联的值: 3. 'l': 2 对不存在;它已被 'l': 3 覆盖。