关于字典

  • 字典是通过键来索引的。
  • 因为字典按键索引,所以无所谓顺序。
  • 字典的键不能重复。
  • 可以通过键改变该键对应的值,如果键不存在,则在字典最后创建这个键值对。
  • 字典与序列一样,使用赋值号直接赋值只是创建了一个引用。
  • 字典的键与值都可以是一个函数(Python 字典比 JavaScript 的对象还要强大)
  • 只有不可变类型的变量可以作为字典的键,举个例子:元组和字符串可以作为字典的键,但列表不可以。
  • 判断某个键是否存在:键 in 字典

创建字典

  1. 字典名 = {key1: value1, key2: value2, key3: value3}

  1. li = [[1, 2], [3, 4], [5, 6]] # 这种序列叫做 双值子序列
  2. d = dict(li)
  3. print(d) # output: {1: 2, 3: 4, 5: 6}

可以对任何包含双值子序列的序列使用 dict()

其他双值子序列的例子:

  • [ ('a', 'b'), ('c', 'd'), ('e', 'f') ]
  • ( ['a', 'b'], ['c', 'd'], ['e', 'f'] )
  • [ 'ab', 'cd', 'ef' ]
  • [[1, 2], (3, 4), '56']

使用 zip() 函数可以很方便地创建双值子序列。

字典常用内置方法

  • 字典名.get(key):功能与 []索引相似,只是用 [] 获取不存在的键会抛出异常,但若使用 get 方法,当 key 不存在于字典中时,或返回 None

  • 字典名.keys():返回一个对象,里面包含该字典所有的键

  • 字典名.values():返回一个对象,里面包含该字典所有的值

  • 字典名.items():返回一个对象,里面包含该字典所有的键和值,可以用 list() 转换成 双值子序列

  • 字典2 = 字典1.copy():复制字典

  • 字典1.update(字典2):将 字典2 合并到 字典1,如果有相同的键,新值会覆盖原来的值

  • 字典名.fromkeys(列表或元组[,值]),值默认为 None。该方法的用法:先创建一个空字典,配合 range() 为字典添加元素。

  • 字典名.clear():清除所有元素

字典推导式

语法与列表推导式相似,只是表达式是一个键值对,且使用大括号,下面是一个简单的例子:

  1. dic = {num:num for num in range(3)}
  2. print(dic) # output: {0: 0, 1: 1, 2: 2}

对单词中的字母计数,并返回字典形式的计数结果:

  1. word = 'letters'
  2. letter_counts = {letter: word.count(letter) for letter in set(word)}
  3. print(letter_counts) # output: {'t': 2, 'l': 1, 'e': 2, 'r': 1, 's': 1}

底层实现原理

Reference: