字典的特性
- 任意对象的无序集合
- 通过键而不是偏移来读取元素
- 支持原处修改,异构,任意嵌套
- 可变映射类型
- 字典存储的是对象引用(同列表)
常见的字典常量与操作
D = {} # 空字典
D = {"age": 20, "name": "kobe"} # 两项目字典
D = {"age": 2, "info": {"address": "jx"}} # 嵌套
D = dict.fromkeys(['a', 'b']) # 创建字典
D = dict(zip(['name', 'age'], ['kobe', 20])) # 创建字典
D = dict(name='kobe', age= 20) # 创建字典
D['name'] / D['info']['address'] # 通过键获取索引
'name' in D # 成员关系
list(D.keys()) # 以列表返回一个字典所有的键
list(D.values()) # 以列表返回一个字典所有的值
list(D.items()) # 以列表返回可遍历的(键, 值) 元组数组。
D.copy() # 返回一个字典的浅复制
D.get(key, default=None) 返回指定键的值,如果值不在字典中返回默认值None。
D.update(dict2) # 把字典dict2的键/值对更新到dict里。
D.pop() # 删除
len(D) # 长度
D[key] = value # 新增, 修改, 删除
del D[key] # 根据key进行删除
D = {x: x * 2 for x in range(10)} # 字典解析字典的实际应用
>>> D
{'name': 'kobe', 'cp3': 'cpul'}
>>> D['kobe'] = 'cpul'
>>> D
{'name': 'kobe', 'cp3': 'cpul', 'kobe': 'cpul'}>>> D = {'name': 'kobe', 'cp3': 'cpul', 'kobe': 'cpul'}
>>> len(D)
3
>>> "name" in D
True
>>> list(D.keys())
['name', 'cp3', 'kobe']
>>> list(D.values())
['kobe', 'cpul', 'cpul']在原处修改字典
>>> D = {'name': 'kobe', 'cp3': 'cpul', 'kobe': 'cpul'}
>>> D['name'] = 'james'
>>> D
{'name': 'james', 'cp3': 'cpul', 'kobe': 'cpul'}
>>> del D['cp3']
>>> D
{'name': 'james', 'kobe': 'cpul'}其他字典方法
>>> D = {'name': 'kobe', 'cp3': 'cpul', 'kobe': 'cpul'}
>>> list(D.keys())
['name', 'cp3', 'kobe']
>>> list(D.values())
['kobe', 'cpul', 'cpul']
>>> list(D.items())
[('name', 'kobe'), ('cp3', 'cpul'), ('kobe', 'cpul')]
>>> D.get('name')
'kobe'
>>> print(D.get('sex')) # 访问不存在的键的值, 默认返回None
None
>>> print(D.get('sex', 'boy')) # 当访问不存在的键的值, 可以指定一个默认值
boy
>>>>>> D1 = {"name": "kobe", "sex": "boy"}
>>> D2 = {"name": "james", "age": 20}
>>> D1.update(D2)
>>> D1
{'name': 'james', 'sex': 'boy', 'age': 20}
>>> D2
{'name': 'james', 'age': 20}>>> D1
{'name': 'james', 'sex': 'boy', 'age': 20}
>>> D1.pop('age')
20
>>> D1
{'name': 'james', 'sex': 'boy'}字典用法注意事项
- 不支持序列运算
- 对一个新的索引赋值会添加一项
- 键不一定总数字符串
>>> D1 = {1: 'famous'}
>>> D1
{1: 'famous'}避免missing-key错误
读取不存在的键是会抛错的, 我们需要使用一些技巧去避免这种类型错误。
Matrix = {
(2, 3, 4): 78,
(7, 8, 9): 81
}
# 使用if else 判断
if ((2, 3, 4) in Matrix):
print(Matrix[(2, 3, 4)])
else:
print('not exists')# 使用try-catch方式
Matrix = {
(2, 3, 4): 78,
(7, 8, 9): 81
}
try:
print(Matrix[(2, 3, 6)])
except KeyError as err:
print(err)# 使用get方法
>>> Matrix = {
... (2, 3, 4): 78,
... (7, 8, 9): 81
... }
>>> Matrix
{(2, 3, 4): 78, (7, 8, 9): 81}
>>> print(Matrix.get((2, 3, 4), 0))
78
>>> print(Matrix.get((2, 3, 6), 0))
0创建字典的方法
# 直接创建变量
{"name": "kobe", "age": 20}
# 动态创建
D = {}
D.name = 'kobe'
D.age = 20
# 代码量比较少, 同时键必须是字符串才可以。
dict(name="kobe", age=30)
dict(['name', 'age'], ['kobe', 30])>>> print(dict.fromkeys(['name', 'age'], 0))
{'name': 0, 'age': 0}