字典知识思维整理字典知识思维导图整理字典
字典是Python中一种无序(逻辑上)、可变、键值对(key-value)形式的数据结构。每个键(key)对应一个值(value),通过键来快速查找值。
# 字面量语法# {'a': 1, 'b': 2}d = {'a': 1, 'b': 2}print(d)
核心特点:
创建字典
1.1 字面量创建
d = {'a': 1, 'b': 2}dd = {}print(d) # {'a': 1, 'b': 2}print(dd) # {} 空字典(注意:不是空集合)
1.2 构造函数创建
键自动转换为字符串
# 键自动转换为字符串# {'a': 1, 'b': 2}d1 = dict(a=1, b=2)print(d1) # {'a': 1, 'b': 2}
可迭代对象
# 可迭代对象# {'a': 1, 'b': 2}d2 = dict([('a', 1), ('b', 2)])print(d2) # {'a': 1, 'b': 2}
搭配zip
# 搭配zip# {'a': 1, 'b': 2}d3 = dict(zip(['a', 'b'], [1, 2]))print(d3) # {'a': 1, 'b': 2}
1.3 字典推导式
字典推导式,必须带【键:值】结构:
# 字典推导式d4 = {x: x**2for x inrange(5)}print(d4) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
1.4 批量创建
根据键唯一的特性:
d5 = dict.fromkeys(['apple', 'orange', 'apple', 'pear'], 12)print(d5) # {'apple': 12, 'orange': 12, 'pear': 12}
1.5 复制现有字典
import copyd6 = d5.copy()print(d6)d7 = copy.deepcopy(d5)print(d7)
浅拷贝 vs 深拷贝:
浅拷贝是键被复制,而值根据元素类型分可变类型和不可变类型;如果值是可变类型,那么修改或者增加值,键对应的值必然发生改变;如果值是不可变类型,本质上没有啥区别。 深拷贝是全部都被复制,递归复制所有层级,如果原来的数据或者被复制的数据被改变,两者不会相互影响,独立统一。
修改访问删除
# 访问、修改、删除# 访问 d8 = {'name': 'Alice', 'age': 18, 'gender': '女'}print(d8) # {'name': 'Alice', 'age': 18, 'gender': '女'}print(d8.get('name')) # Aliceprint(d8.get('address')) # Noneprint(d8.get('city', '杭州')) # 将没有的提供默认值 也就是杭州print(d8) # {'name': 'Alice', 'age': 18, 'gender': '女'}# 修改# 添加键d8['Alice'] = 'Tom'print(d8) # {'name': 'Alice', 'age': 18, 'gender': '女', 'Alice': 'Tom'}# 修改已经有的键值d8['name'] = '小明'print(d8) # {'name': '小明', 'age': 18, 'gender': '女', 'Alice': 'Tom'}# 删除# 删除键值对(不存在会报错)# del d8['city']d8.pop('age')print(d8) # 键age对应的值被删除,{'name': '小明', 'gender': '女', 'Alice': 'Tom'}a = d8.popitem()print(a) # 删除并返回最后插入的键值对 ('Alice', 'Tom')print(d8) # {'name': '小明', 'gender': '女'}
常用内置方法速查
| | |
|---|
d.keys() | | list(d.keys()) |
d.values() | | list(d.values()) |
d.items() | | for k, v in d.items() |
d.get(k, default) | | d.get('x', 0) |
d.setdefault(k, v) | | d.setdefault('count', 0) |
d.update(d2) | | d.update({'x': 10}) |
d.pop(k) | | d.pop('key') |
d.popitem() | | k, v = d.popitem() |
遍历字典
遍历键:
# 普通d9 = {'name': 'Alice', 'age': 18, 'gender': '女', 'address': '浙江杭州', 'city': '杭州'}for key in d9.keys(): # 或者使用for key in d9:print(key, d9[key])
仅遍历值:
d9 = {'name': 'Alice', 'age': 18, 'gender': '女', 'address': '浙江杭州', 'city': '杭州'}for value in d9.values():print(value)
遍历键值:
d9 = {'name': 'Alice', 'age': 18, 'gender': '女', 'address': '浙江杭州', 'city': '杭州'}for key,value in d9.items():print(f"键:{key},值:{value}")
同时获取索引、键值:
d9 = {'name': 'Alice', 'age': 18, 'gender': '女', 'address': '浙江杭州', 'city': '杭州'}for idx, (key , value) inenumerate(d9.items()):print(f"索引:{idx},键与值:{key}:{value}")