通过编号来访问各个值时, 列表很有用。
我们这里介绍一种可通过名称来访问各个值的数据结构, 这种数据结构成为字典。
1.字典的值不按顺序排列, 而是存在健下,
2.健可以是数字, 字符串或元祖
创建字典
persons = {'zhansan': 11, 'lisi': 12}
字典的基本操作
- 存取
dict[k] = v
dict[k]
- 删
del dict[k]
- 是否包含
k in dict
- 长度
len(dict)
- 清空
dict.clear()
- copy
person1 = {'name': 'lisi', 'hobby': ['lanqiu', 'zuqiu', 'paiqiu']}
person2 = person1.copy()
print(person1) # {'hobby': ['lanqiu', 'zuqiu', 'paiqiu'], 'name': 'lisi'}
print(person2) # {'hobby': ['lanqiu', 'zuqiu', 'paiqiu'], 'name': 'lisi'}
person2['name'] = 'zhangsan'
person2['hobby'].remove('zuqiu')
print(person1) # {'hobby': ['lanqiu', 'paiqiu'], 'name': 'lisi'}
print(person2) # {'hobby': ['lanqiu', 'paiqiu'], 'name': 'zhangsan'}
修改person2的hobby, person1也被改变了, 所以这种拷贝是浅拷贝
为了避免这种问题, 可以使用深拷贝, deepcopy
from copy import deepcopy
person1 = {'name': 'lisi', 'hobby': ['lanqiu', 'zuqiu', 'paiqiu']}
person2 = deepcopy(person1)
print(person1) # {'hobby': ['lanqiu', 'zuqiu', 'paiqiu'], 'name': 'lisi'}
print(person2) # {'hobby': ['lanqiu', 'zuqiu', 'paiqiu'], 'name': 'lisi'}
person2['name'] = 'zhangsan'
person2['hobby'].remove('zuqiu')
print(person1) # {'hobby': ['lanqiu', 'zuqiu', 'paiqiu'], 'name': 'lisi'}
print(person2) # {'hobby': ['lanqiu', 'paiqiu'], 'name': 'zhangsan'}
- fromkeys
d = {}.fromkeys(['name', 'age'])
print(d) # {'age': None, 'name': None}
- get
如果访问字典没有的健, 将发生错误, 可以使用get避免报错
d.get('name') # name不存在, 会返回None
d.get('name', 'lisi') # 也可以返回指定的值
- items, keys和values
person = {'name': 'lisi', 'age': 11}
print(person.items()) # [('age', 11), ('name', 'lisi')]
print(person.keys()) # ['age', 'name']
print(person.values()) # [11, 'lisi']
- pop
person = {'name': 'lisi', 'age': 11}
person.pop('name')
print(person) # {'age': 11}
dict
序列转字典
person = [('name', 'zhangsan'), ('age', 11)]
d1 = dict(person) # {'age': 11, 'name': 'zhangsan'}
或
d2 = dict(name='lisi', age=12) # {'age': 12, 'name': 'lisi'}