字典是另一种可变容器模型,且可存储任意类型对象。dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
列表是有序的对象集合,字典是无序的对象集合。字典查找速度都非常快,不会随着字典大小的增加而变慢。列表越大,查找速度越慢。
1 字典定义
1.1 字典定义(大括号)
1.1.1 直接定义
直接定义 |
|
python # 定义字典,‘:’前无空格,后有空格 dic = {'Peter': 1, 'Joey': 2} print(dic['Joey']) print(dic) # 同一key多次赋值,取最后一次赋值 dic = {'Peter': 1, 'Joey': 2, 'Joey': 3} print(dic['Joey']) print(dic) # 字典嵌套 dic = {'a': {'A': 1, 'B': 2}} print(dic['a']) print(dic['a']['A']) |
python 2 {'Peter': 1, 'Joey': 2} 3 {'Peter': 1, 'Joey': 3} {'A': 1, 'B': 2} 1 |
1.1.2 函数定义
dict() 函数直接定义 |
|
python # dict(key1=item1, key2=item2...) dic = dict(Peter=1, Joey=2) print(dic['Joey']) print(dic) |
python # key不加引号 2 {'Peter': 1, 'Joey': 2} |
info 转换为 dict() |
|
python # info = [(key1, item1)...] # dic = dict(info) info = [('Peter', 1), ('Joey', 2)] dic = dict(info) print(dic['Joey']) print(dic) |
python 2 {'Peter': 1, 'Joey': 2} |
1.1.3 转换定义(相同值)
转换定义 |
|
python tup1 = 1, 2, 3, 4 tup2 = 'a', 'b', 'c', 'd' # item 为空 字典 dic = dict.fromkeys(tup1) print(dic) # item 为某数据 字典 dic = dict.fromkeys(tup1, 0) print(dic) # item 只能统一定制 dic = dict.fromkeys(tup1, tup2) print(dic) |
python {1: None, 2: None, 3: None, 4: None} {1: 0, 2: 0, 3: 0, 4: 0} {1: ('a', 'b', 'c', 'd'), 2: ('a', 'b', 'c', 'd'), 3: ('a', 'b', 'c', 'd'), 4: ('a', 'b', 'c', 'd')} |
1.1.4 字典推导式
字典推导式 — 片段提取 |
|
python staffs = { 'Peter': { '性别': '男', '取向': '女', '身高': 183 }, "Joey": { '性别': '女', '取向': '男', '身高': 164 } } staff = {k: i for k, i in staffs.items() if i['性别'] == '男'} print(staff) |
python {'Peter': {'性别': '男', '取向': '女', '身高': 183}} |
字典推导式 — 列表合成字典 |
|
python list1 = ['a', 'b', 'c', 'd'] list2 = [1, 2, 3, 4] dic = {list1[i]: list2[i] for i in range(len(list1))} print(dic) |
python {'a': 1, 'b': 2, 'c': 3, 'd': 4} |
2 字典函数
2.1 键最值
python dic = {'A': 'a', 'B': 'b', '1': 'a'} # 返回最大值 print(max(dic)) # 返回最小值 print(min(dic)) |
python # 字母比数字大 B 1 |
|
2.2 键数量
python dic = {'A': 'a', 'B': 'b', '1': 'a'} print(len(dic)) |
python 3 |
|
3 字典方法
3.1 增加元素组
增加元素 |
|
python # 添加 一组元素 dic = {'a': 'A', 'b': 'B', 'c': 'C'} dic['d'] = 'D' print(dic) # 添加 一套字典 dic = {'a': 'A', 'b': 'B'} dic2 = {1: 'A', 2: 'B'} dic.update(dic2) print(dic) |
python {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D'} {'a': 'A', 'b': 'B', 1: 'A', 2: 'B'} |
3.2 删除元素组(含del)
方法删除元素 |
|
python dic = {'a':'A', 'b':'B', 'c':'C', 'd':'D'} # 删除 指定元素 dic.pop('b') print(dic) # 删除 最后一组元素 dic.popitem() print(dic) # 清空 字典 dic.clear() print(dic) |
python {'a': 'A', 'c': 'C', 'd': 'D'} {'a': 'A', 'c': 'C'} {} |
del 删除元素 |
|
python dic = {'a': 'A', 'b': 'B', 'c': 'C'} # 删除 指定存在的元素 返回值 a = dic.pop('b') print(a) print(dic) # 删除 指定不存在的元素 返回值 b = dic.pop('d','D') print(b) print(dic) # 删除 最后一组元素 dic.popitem() print(c) print(dic) # 清空 字典 dic.clear() print(dic) |
python B {'a': 'A', 'c': 'C'} # 指定元素不存在,返回第2参数 D {'a': 'A', 'c': 'C'} {'c': 'C'} {'a': 'A'} {} |
3.3 改变元素键
改变元素键 |
|
python dic = {'a':'A', 'b':'B', 'c':'C'} dic['a'] = 1 print(dic) |
python {'a': 1, 'b': 'B', 'c': 'C'} |
3.4 查询元素键
查询 key 对应 item — 没查着报错 |
|
python dic = {'a': 1, 'b': 2, 'c': 3} # 查找 key 对应的 item print(dic['b']) # 查找 非key 对应的 item print(dic['d']) # 字典嵌套读取 family = {'peter' : {'length' : 1.83, 'weight' : 65}} print(family['peter']['length']) |
python 2 报错:KeyError:'d' 1.83 |
get 查询 key 对应 item — 没查着不报错 |
|
python dic = {'a': 1, 'b': 2, 'c': 3} # 查找 key 对应的 item print(dic.get('a')) print(dic.get('a','A')) # 查找 非key 对应的 item print(dic.get('d')) print(dic.get('d','D')) # 字典嵌套读取 family = {'peter' : {'length' : 1.83, 'weight' : 65}} print(family.get('peter', {}).get('length')) |
python 1 1 # 匹配 无视第2参数 None # 未匹配 无第2参数 返回 None D # 未匹配 返回第2参数 1.83 |
setdefault 查询 key 对应 item — 没查着就添加 |
|
python # 查找 key 对应的 item dic = {'a': 1, 'b': 2, 'c': 3} print(dic.setdefault('a')) print(dic) dic = {'a': 1, 'b': 2, 'c': 3} print(dic.setdefault('a', 'A')) print(dic) # 查找 非key 对应的 item dic = {'a': 1, 'b': 2, 'c': 3} print(dic.setdefault('d')) print(dic) dic = {'a': 1, 'b': 2, 'c': 3} print(dic.setdefault('d', 'D')) print(dic) |
python 1 {'a': 1, 'b': 2, 'c': 3} 1 {'a': 1, 'b': 2, 'c': 3} # 查找 非key 添加一组元素到字典 None {'a': 1, 'b': 2, 'c': 3, 'd': None} D {'a': 1, 'b': 2, 'c': 3, 'd': 'D'} |
3.5 字典提取
提取 keys/items/al |
|
python dic = {'a': 1, 'b': 2, 'c': 3} # 键集合 print(dic.keys()) print(type(dic.keys())) for i in dic.keys(): print(i, end = ' ') print() # 值集合 print(dic.values()) print(type(dic.values())) for i in dic.values(): print(i, end = ' ') print() # 键,值集合 print(dic.items()) print(type(dic.items())) for i in dic.items(): print(i, end = ' ') print() for a, b in dic.items(): print(f'{a} = {b}', end = '; ') |
python dict_keys(['a', 'b', 'c']) <class 'dict_keys'> a b c dict_values([1, 2, 3]) <class 'dict_values'> 1 2 3 dict_items([('a', 1), ('b', 2), ('c', 3)]) <class 'dict_items'> ('a', 1) ('b', 2) ('c', 3) # key, item 分别读取 a = 1; b = 2; c = 3; |
3.6 字典复制
字典复制 |
|
python dic = {'a': 1, 'b':2} # 复制列表 不同步修改 dic2 = dic.copy() dic['a'] = 'A' print(dic2) print(dic) # 复制列表 同步修改 dic3 = dic dic3['a'] = 'A' print(dic3) print(dic) # 同步修改 |
python {'a': 1, 'b': 2} {'a': 'A', 'b': 2} {'a': 'A', 'b': 2} {'a': 'A', 'b': 2} |
4 字典自定义函数
4.1 统计
‘二级字典’ 计数 |
|
python dic = {} for i in range(5): if dic.get('A'): dic.update({'A': {'a': (dic['A']['a']+1)}}) else: dic.update({'A': {'a': 1}}) print(dic) |
5 大佬们的骚操作
5.1 列表内字典排序
列表内字典排序——孙兴华zz(bilibili) |
|
python 列表名 = [ { '名':'孙兴华','龄':20 } , {'名':'赵丽颖','龄':33 } , {'名':'李小龙','龄':80 } ] 列表名.sort( key=lambda x : x['名'], reverse = True ) print(列表名) |