10. 字典(dict)

  • 字典是另一种可变容器模型,可存储任意类型对象
  • 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中
  • 键必须是唯一的,但值则不必
  • 值可以是任意数据类型
  • 键必须是不可变的,例如:数字、字符串、元组可以,但列表就不行
  • 如果用字典里没有的键访问数据,会报错
  • 字典的元素没有顺序,不能通过下标引用元素,通过键来引用
  • 字典内部存放的顺序和 key 放入的顺序是没有关系的

格式如下:

d = {key1 : value1, key2 : value2 }  

10.1 访问字典

dis = {'a': 1, 'b': [1, 2, 3]}  
print(dis['b'][2])  

10.2 修改字典

dis = {'a': 1, 'b': [1, 2, 3], 9: {'name': 'hello'}}  
dis[9]['name'] = 999  
print(dis)  
# {'a': 1, 9: {'name': 999}, 'b': [1, 2, 3]}  

10.3 删除字典

用 del 语句删除字典或字典的元素。

dis = {'a': 1, 'b': [1, 2, 3], 9: {'name': 'hello'}}  
del dis[9]['name']  
print(dis)  
del dis # 删除字典  
# {'a': 1, 9: {}, 'b': [1, 2, 3]}  

10.4 字典函数

  • len(dict) 计算字典元素个数,即键的总数
  • str(dict) 输出字典,以可打印的字符串表示
  • type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型
  • key in dict 判断键是否存在于字典中

10.5 字典方法

方法 描述
dict.clear() 删除字典内所有元素
dict.copy() 返回一个字典的浅复制
dict.fromkeys(seq[, value]) 创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值
dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回默认值
dict.items() 以列表形式返回可遍历的(键, 值)元组数组
dict.keys() 以列表返回一个字典所有的键
dict.values() 以列表返回字典中的所有值
dict.setdefault(key, default=None) 如果 key 在字典中,返回对应的值。如果不在字典中,则插入 key 及设置的默认值 default,并返回 default ,default 默认值为 None。
dict.update(dict2) 把字典参数 dict2 的键/值对更新到字典 dict 里

dic1 = {'a': 'a'}  
dic2 = {9: 9, 'a': 'b'}  
dic1.update(dic2)  
print(dic1)  
# {'a': 'b', 9: 9}  
  • dict.pop(key[,default])
  • 删除字典给定键 key 所对应的值,返回值为被删除的值。key 值必须给出,否则返回 default 值。
  • dict.popitem()
  • 随机返回并删除字典中的一对键和值(一般删除末尾对)

10.6 字典推导式

构造函数 dict() 直接从键值对元组列表中构建字典。如果有固定的模式,列表推导式指定特定的键值对:

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

此外,字典推导可以用来创建任意键和值的表达式词典:

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

如果关键字只是简单的字符串,使用关键字参数指定键值对有时候更方便:

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

发表回复

登录... 后才能评论