建设一个一般网站需要多少时间,嘉兴网站开发选哪家,花瓣网素材,互联网营销师报名字典是Python中非常强大的内置数据结构#xff0c;像是一个智能索引卡片盒。我们从以下几个方面来讲解#xff1a;
目录
1. 字典是什么#xff1f;
2. 创建字典
3. 增#xff1a;添加键值对
4. 删#xff1a;删除键值对
5. 改#xff1a;修改键值对
6…字典是Python中非常强大的内置数据结构像是一个智能索引卡片盒。我们从以下几个方面来讲解目录1. 字典是什么2. 创建字典3. 增添加键值对4. 删删除键值对5. 改修改键值对6. 查查找键值对7. 字典遍历8. 字典操作总结表9. 字典 vs 列表 vs 元组10. 常见错误提醒11. 字典的进阶用法12. 总结字典dict- 键值对集合1. 字典是什么字典是一种可变的、无序的键值对集合。每个键key对应一个值value就像我们现实中的字典通过单词键查找对应的解释值。特点键必须是不可变类型字符串、数字、元组值可以是任意类型字典无序Python 3.7 虽然保持了插入顺序但本质上还是无序的关于有序无序的补充以前是纯哈希表专门用来存储“键值对”Key-Value的数据结构。无论数据结构有多大通过键可以迅速定位到对应的值。哈希表可以看成一个大仓库东西都乱放的没有顺序。现在说的有序其实是多加了一个索引数组字典的存储就更紧凑、省内存。我们通过索引数组前台找到对应哈希表后台的键值对的位置。输出的话就是按照后台的插入顺序01234输出。所以看起来有序。建议在日常写代码时完全可以依赖字典的插入顺序不用担心它变乱。2. 创建字典# 空字典 empty_dict {} # 有元素的字典使用大括号 student { name: 小明, age: 18, grade: 高三 } # 使用dict()构造函数 person dict(name小红, age17, city北京) # 混合类型字典 mixed { 整数: 100, 字符串: Python, 列表: [1, 2, 3], 元组: (4, 5, 6), 嵌套字典: {key: value} } print(student) # 输出{name: 小明, age: 18, grade: 高三}代码解释用大括号{}创建字典键值对用key: value格式之间用逗号隔开。3. 增添加键值对# 创建一个空字典 info {} # 方法1直接赋值添加最常用 info[name] 张三 info[age] 25 print(info) # 输出{name: 张三, age: 25} # 方法2update()批量添加 info.update({job: 工程师, city: 上海}) print(info) # 输出{name: 张三, age: 25, job: 工程师, city: 上海} # 方法3setdefault()添加如果键不存在 info.setdefault(salary, 8000) # 添加因为salary不存在 print(info) # 输出{name: 张三, age: 25, job: 工程师, city: 上海, salary: 8000} info.setdefault(name, 李四) # 不添加因为name已存在 print(info[name]) # 输出张三保持不变关键点dict[key] value最简单update()批量添加setdefault()智能添加。4. 删删除键值对data {a: 1, b: 2, c: 3, d: 4, e: 5} # 方法1del 根据键删除 del data[a] # 删除键为a的项 print(data) # 输出{b: 2, c: 3, d: 4, e: 5} # 方法2pop() 删除并返回值 value data.pop(b) # 删除键为b的项并返回值 print(f删除的值{value}) # 输出2 print(f删除后字典{data}) # 输出{c: 3, d: 4, e: 5} # 方法3popitem() 删除最后一项Python 3.7 key, value data.popitem() # 删除并返回最后一项 print(f删除的键值对{key}{value}) # 输出e5 print(f删除后字典{data}) # 输出{c: 3, d: 4} # 方法4clear() 清空字典 data.clear() print(data) # 输出{}关键点del直接删除pop()删除并返回popitem()删除最后一项clear()清空全部。5. 改修改键值对user {name: 张三, age: 20, city: 北京} # 方法1直接赋值修改 user[age] 21 # 修改年龄 print(user) # 输出{name: 张三, age: 21, city: 北京} # 方法2update()批量修改 user.update({city: 上海, job: 学生}) # 修改城市添加工作 print(user) # 输出{name: 张三, age: 21, city: 上海, job: 学生} # 注意如果update的键不存在会新增键值对6. 查查找键值对book { title: Python编程, author: John, price: 59.9, year: 2023 } # 方法1直接通过键访问 title book[title] print(f书名{title}) # 输出Python编程 # 方法2get()安全访问推荐 price book.get(price) print(f价格{price}) # 输出59.9 # get()可以设置默认值键不存在时返回默认值 pages book.get(pages, 300) # pages键不存在返回默认值300 print(f页数{pages}) # 输出300 # 方法3in检查键是否存在 if author in book: print(f作者存在{book[author]}) # 输出作者存在John # 方法4keys()获取所有键 all_keys book.keys() print(f所有键{list(all_keys)}) # 输出[title, author, price, year] # 方法5values()获取所有值 all_values book.values() print(f所有值{list(all_values)}) # 输出[Python编程, John, 59.9, 2023] # 方法6items()获取所有键值对 all_items book.items() print(f所有键值对{list(all_items)}) # 输出[(title, Python编程), (author, John), (price, 59.9), (year, 2023)] # 方法7len()获取键值对数量 count len(book) print(f字典长度{count}) # 输出4关键点get()比直接访问更安全keys()、values()、items()是三个重要方法。7. 字典遍历student {name: 小明, age: 18, grade: 高三, score: 95} print( 遍历所有键 ) for key in student: print(f键{key}) print(\n 遍历所有值 ) for value in student.values(): print(f值{value}) print(\n 遍历所有键值对 ) for key, value in student.items(): print(f{key}: {value}) # 输出 # 键name # 键age # 键grade # 键score # # 值小明 # 值18 # 值高三 # 值95 # # name: 小明 # age: 18 # grade: 高三 # score: 958. 字典操作总结表操作类型方法/语法作用示例返回值创建{}创建字典d {a: 1}字典dict()构造函数d dict(a1)字典增d[key] value添加/修改d[b] 2无update(dict2)批量添加d.update({c:3})无setdefault(key, default)智能添加d.setdefault(d, 4)值删del d[key]删除指定键del d[a]无pop(key)删除并返回d.pop(b)值popitem()删除最后一项d.popitem()(键, 值)clear()清空字典d.clear()无改d[key] value修改值d[a] 10无update(dict2)批量修改d.update({a:10})无查d[key]访问值d[a]值get(key, default)安全访问d.get(z, 0)值keys()所有键d.keys()键视图values()所有值d.values()值视图items()所有键值对d.items()键值对视图in检查键是否存在a in d布尔值len(d)获取长度len(d)整数9. 字典 vs 列表 vs 元组对比项字典列表元组符号{}[]()存储方式键值对有序序列有序序列可变性✅ 可修改✅ 可修改❌ 不可修改索引方式键整数索引整数索引查找速度极快通过键较慢遍历较慢遍历内存占用较多中等较少典型用途配置文件、JSON数据、数据库记录动态数据集合固定数据、函数返回多个值示例{name: 小明, age: 18}[小明, 小红](100, 200)建议需要快速通过键查找数据就用字典需要有序集合就用列表数据固定就用元组。10. 常见错误提醒# 错误1用可变类型作为字典的键 # d {[1, 2]: 列表} # TypeError: unhashable type: list # d {{a:1}: 字典} # TypeError: unhashable type: dict # 正确用不可变类型作为键 d1 {(a, b): 元组作为键} # 正确元组不可变 d2 {字符串: 值} # 正确字符串不可变 d3 {100: 数字} # 正确数字不可变 # 错误2访问不存在的键 # data {a: 1} # print(data[b]) # KeyError: b # 正确使用get()方法 value data.get(b, 0) # 键不存在时返回默认值0 print(value) # 输出0 # 错误3遍历时修改字典大小 # d {a: 1, b: 2, c: 3} # for key in d: # if key b: # del d[key] # RuntimeError: dictionary changed size during iteration # 正确先收集要删除的键再删除 d {a: 1, b: 2, c: 3} to_delete [] for key in d: if key b: to_delete.append(key) for key in to_delete: del d[key] print(d) # 输出{a: 1, c: 3}11. 字典的进阶用法# 1. 字典推导式类似列表推导式 squares {x: x*x for x in range(1, 6)} print(squares) # 输出{1: 1, 2: 4, 3: 9, 4: 16, 5: 25} # 2. 字典合并Python 3.5 dict1 {a: 1, b: 2} dict2 {c: 3, d: 4} merged {**dict1, **dict2} # 合并两个字典 print(merged) # 输出{a: 1, b: 2, c: 3, d: 4} # 3. 嵌套字典 students { 小明: {age: 18, grade: A}, 小红: {age: 17, grade: B}, 小刚: {age: 19, grade: A} } # 访问嵌套字典 print(students[小明][age]) # 输出18 # 4. fromkeys()快速创建字典 keys [name, age, city] default_dict dict.fromkeys(keys, 未知) print(default_dict) # 输出{name: 未知, age: 未知, city: 未知} # 5. 带条件的字典推导式 numbers [1, 2, 3, 4, 5, 6] even_squares {x: x*x for x in numbers if x % 2 0} print(even_squares) # 输出{2: 4, 4: 16, 6: 36}代码解释squares {x: x*x for x in range(1, 6)}range(1, 6)生成从 1 到 5 的整数序列不包括 6for x in range(1, 6)遍历这个序列中的每个数字x: x*x对于每个数字 x创建一个键值对其中键是 x值是 x 的平方{...}用花括号包围表示创建一个字典squares 将生成的字典赋值给变量 squares它的传统写法是squares {} for x in range(1, 6): squares[x] x * x字典推导式是一种更简洁的创建字典的方式。12. 总结字典键值对集合通过键快速查找值核心特点可变、无序、键必须不可变常用操作增删改查四类操作安全访问优先使用get()方法避免KeyError三大视图keys()、values()、items()是遍历字典的关键使用场景配置文件、JSON数据处理、数据库记录、缓存等记忆口诀字典用{}键值对存储键要找不可变值可随便变增删改查样样行get()访问最安全遍历用items()清晰又方便这篇文章涵盖了字典的核心操作从基础的增删改查到进阶用法帮助你全面掌握Python字典的使用让我们一起加油吧~