5.5. 字典

另一个非常有用的 Python 內置数据类型是 字典 (参见 映射类型 —- dict)。字典在其他语言里可能会被叫做 联合内存联合数组。与以连续整数为索引的序列不同,字典是以 关键字 为索引的,关键字可以是任意不可变类型,通常是字符串或数字。如果一个元组只包含字符串、数字或元组,那么这个元组也可以用作关键字。但如果元组直接或间接地包含了可变对象,那么它就不能用作关键字。列表不能用作关键字,因为列表可以通过索引、切片或 append()extend() 之类的方法来改变。

理解字典的最好方式,就是将它看做是一个 键: 值 对的集合,键必须是唯一的(在一个字典中)。一对花括号可以创建一个空字典:{} 。另一种初始化字典的方式是在一对花括号里放置一些以逗号分隔的键值对,而这也是字典输出的方式。

字典主要的操作是使用关键字存储和解析值。也可以用 del 来删除一个键值对。如果你使用了一个已经存在的关键字来存储值,那么之前与这个关键字关联的值就会被遗忘。用一个不存在的键来取值则会报错。

对一个字典执行 list(d) 将返回包含该字典中所有键的列表,按插入次序排列 (如需其他排序,则要使用 sorted(d))。要检查字典中是否存在一个特定键,可使用 in 关键字。

以下是使用字典的一些简单示例

  1. >>> tel = {'jack': 4098, 'sape': 4139}
  2. >>> tel['guido'] = 4127
  3. >>> tel
  4. {'jack': 4098, 'sape': 4139, 'guido': 4127}
  5. >>> tel['jack']
  6. 4098
  7. >>> del tel['sape']
  8. >>> tel['irv'] = 4127
  9. >>> tel
  10. {'jack': 4098, 'guido': 4127, 'irv': 4127}
  11. >>> list(tel)
  12. ['jack', 'guido', 'irv']
  13. >>> sorted(tel)
  14. ['guido', 'irv', 'jack']
  15. >>> 'guido' in tel
  16. True
  17. >>> 'jack' not in tel
  18. False

dict() 构造函数可以直接从键值对序列里创建字典。

  1. >>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
  2. {'sape': 4139, 'guido': 4127, 'jack': 4098}

此外,字典推导式可以从任意的键值表达式中创建字典

  1. >>> {x: x**2 for x in (2, 4, 6)}
  2. {2: 4, 4: 16, 6: 36}

当关键字是简单字符串时,有时直接通过关键字参数来指定键值对更方便

  1. >>> dict(sape=4139, guido=4127, jack=4098)
  2. {'sape': 4139, 'guido': 4127, 'jack': 4098}