一、Python 字典简介字典dict是 Python无序可变键值对容器属于映射类型使用{key: value, ...}定义。存储特点以键 (key): 值 (value)成对存储通过键查找数据查询速度远优于列表键的规则key必须是不可变数据类型字符串、数字、元组列表/字典不能做键同一个字典键唯一重复赋值会覆盖旧值值的规则value无限制数字、字符串、列表、字典、对象都可以存放适用场景保存具备一一对应关系的数据例如用户信息、配置参数、属性映射。二、常用方法1.查询类方法作用示例dict.get(k, [默认])安全取值键不存在返回默认不报错d.get(age,18)dict.keys()获取所有键list(d.keys())dict.values()获取所有值list(d.values())dict.items()获取 (键值) 元组循环遍历专用for k,v in d.items():2.新增/修改类方法作用示例d[k]v有键改值无键新增d[name]小明dict.update()批量新增 / 修改d.update(age20,sex男)dict.setdefault(k,val)无键新增有键不修改原值d.setdefault(hobby,[]).append(跑步)3.删除类方法作用示例del dict[k]删除指定键无键报错del d[sex]dict.pop(k,[默认])删除键 返回值可设置默认防报错resd.pop(age,0)dict.popitem()删除末尾一组键值 (3.7 字典有序)k,vd.popitem()dict.clear()清空字典保留空字典对象d.clear()4.拷贝构造方法作用备注dict.copy()浅拷贝生成新字典嵌套容器共用内层地址改内层原字典变dict.fromkeys(iter,val)批量创建字典类方法dict.fromkeys([1,2,3],0)所有键共用同一个值字典中的深拷贝和浅拷贝单层字典浅拷贝、深拷贝效果一样嵌套字典 / 列表浅拷贝改内层 → 原字典变深拷贝改内层 → 原字典不变开发原则简单字典用浅拷贝嵌套结构、怕被误改 → 必须用深拷贝。取值优先用 get遍历必用 items单个赋值中括号批量更新 update新增不动 setdefault删取数据选 popcopy 浅拷 fromkeys 建字典合并竖线符。字典合并Python3.9new_dict d1 | d2生成新字典不改动原字典d1 | d2原地合并直接修改 d1#字典 dict1 {name:zhangsan,age:18,city:beijing} print(fdict_name:{dict1[name]}) print(fdict_age:{dict1[age]}) print(fdict_city:{dict1[city]}) #添加元素 dict1[gender] male print(fdict1:{dict1}) #修改元素 dict1[age] 100 print(fdict1:{dict1}) #删除元素 del dict1[city] print(fdict1:{dict1}) #遍历字典 for key in dict1: print(fkey:{key},value:{dict1[key]}) #items()方法遍历字典,items()方法返回一个包含字典所有键值对的视图对象可以使用for循环遍历这个视图对象来访问字典中的键值对。 for key,value in dict1.items(): print(fkey:{key},value:{value}) #keys()方法遍历字典,keys()方法返回一个包含字典所有键的视图对象可以使用for循环遍历这个视图对象来访问字典中的键。 for key in dict1.keys(): print(fkey:{key}) #values()方法遍历字典,values()方法返回一个包含字典所有值的视图对象可以使用for循环遍历这个视图对象来访问字典中的值。 for value in dict1.values(): print(fvalue:{value}) #字典的常用方法 #get()方法,用于获取字典中指定键的值如果键不存在则返回默认值None。 print(fage:{dict1.get(age)}) print(fcity1:{dict1.get(city1,aaa)})#get()方法的第二个参数可以指定默认值如果键不存在则返回这个默认值。 #pop()方法,用于删除字典中指定键的键值对并返回被删除的值如果键不存在则返回默认值None。 print(fpop_age:{dict1.pop(age)})#删除键为age的键值对并返回被删除的值 print(fdict1:{dict1}) #update()方法,用于将一个字典的键值对更新到另一个字典中如果键已经存在则覆盖原有的值。 dict2 {name:lisi,age:20,city:shanghai} dict1.update(dict2) print(fdict1:{dict1}) #clear()方法,用于清空字典中的所有键值对使字典变成一个空字典。 dict1.clear() print(fdict1:{dict1}) #setdefault()方法,用于获取字典中指定键的值如果键不存在则将该键与指定的默认值添加到字典中并返回默认值。 print(fsetdefault_name:{dict1.setdefault(name,app)})#键不存在返回指定值 dict1[name] zhaoliu dict1[age] 999 print(fdict1:{dict1}) print(fsetdefault_name:{dict1.setdefault(name,app)})#键存在返回值 #copy()方法,用于创建一个字典的浅复制即创建一个新的字典对象但其中的键值对仍然引用原来的对象。 dict3 dict1.copy() print(fdict3:{dict3}) dict3[name]QQ print(fdict1:{dict1}) print(fdict3:{dict3}) #浅拷贝是指创建一个新的对象但其中的元素仍然引用原来的对象。对于字典来说浅拷贝会创建一个新的字典对象但其中的键值对仍然引用原来的对象。因此如果修改了浅拷贝中的键值对原来的字典中的键值对也会被修改。 #深拷贝是指创建一个新的对象并且其中的元素也都是新的对象。对于字典来说深拷贝会创建一个新的字典对象并且其中的键值对也都是新的对象。因此如果修改了深拷贝中的键值对原来的字典中的键值对不会被修改。 import copy dict4 copy.deepcopy(dict1) print(fdict4:{dict4}) dict4[name] www print(fdict1:{dict1}) print(fdict4:{dict4}) #单层简单字典浅拷、深拷效果一样 #带嵌套列表 / 子字典浅拷改内层牵连原数据深拷完全独立互不干扰 dict1[info] [100,200] print(fdict1:{dict1}) dict5 dict1.copy() print(fdict5:{dict5}) dict5[info][0] 999 print(fdict1:{dict1}) print(fdict5:{dict5}) dict6 copy.deepcopy(dict1) print(fdict6:{dict6}) dict6[info][0] 888 print(fdict1:{dict1}) print(fdict6:{dict6}) #字典推导式 #字典推导式是一种简洁的语法用于创建字典对象。它的语法格式如下 #{key_expression: value_expression for item in iterable if condition} #其中key_expression是用于生成字典键的表达式value_expression是用于生成字典值的表达式iterable是一个可迭代对象condition是一个可选的条件表达式用于过滤可迭代对象中的元素。 #例如下面的代码使用字典推导式创建一个字典其中键是数字值是数字的平方 squares {x: x**2 for x in range(5)} print(fsquares:{squares}) #上面的代码创建了一个字典squares其中键是0到4的数字值是这些数字的平方。输出结果为squares:{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}。 #下面的代码使用字典推导式创建一个字典其中键是数字值是数字的立方且只包含偶数 cubes {x: x**3 for x in range(10) if x % 2 0} print(fcubes:{cubes}) cube3 {x:x**3 for x in range(20) if x%40} print(fcube3:{cube3}) #上面的代码创建了一个字典cubes其中键是0到9的偶数值是这些偶数的立方。输出结果为cubes:{0: 0, 2: 8, 4: 64, 6: 216, 8: 512}. #下面的代码使用字典推导式创建一个字典其中键是字符串值是字符串的长度 words [apple, banana, cherry] lengths {word: len(word) for word in words} print(flengths:{lengths})#上面的代码创建了一个字典lengths其中键是列表words中的字符串值是这些字符串的长度。输出结果为lengths:{apple: 5, banana: 6, cherry: 6}。