目录

一、简介

二、关键知识

1、创建字典

2、 访问元素

3、 添加/修改元素

4、删除元素

选择建议

5、遍历字典

(1)keys()

总结

6、合并字典

核心特性

适用场景

核心特性

增强赋值运算符 |=

使用建议

性能与内存考虑


一、简介

       Python中的字典(dict)是一种非常重要的数据结构,它用于存储键值对(key-value pairs)。字典的特点是查找速度快、灵活易用。  

  • 键(Key):必须是不可变类型(如字符串、数字、元组),且唯一

  • 值(Value):可以是任意数据类型(字符串、数字、列表、甚至另一个字典)。

  • 二、关键知识

    1、创建字典

  • 使用花括号 {} 或 dict() 构造函数:
  • d1 = {'name': 'Alice', 'age': 25}
    d2 = dict(name='Bob', age=30)
    print(d1)           #输出 {'name': 'Alice', 'age': 25}
    print(d2)           #输出 {'name': 'Bob', 'age': 30}

    2、 访问元素

  • 通过键直接访问(不存在时报错)或使用 get() 方法:
  • 3、 添加/修改元素

  • 直接赋值:
  • d1 = {'name': 'Alice', 'age': 25}
    d2 = dict(name='Bob', age=30)
    print(d1['name'])          # 输出: Alice
    print(d1.get('age'))        # 输出: 25
    print(d1.get('address', 'N/A'))  # 不存在时返回默认值'N/A'
    d1['address'] = 'New York'  # 添加新键
    print(d1)
    d1['age'] = 26              # 修改现有键
    print(d1)

    运行结果:

    4、删除元素

    (1) del 语句

  • 语法del dict[key]

  • 行为

  • 直接删除指定键的键值对。

  • 无返回值,仅执行删除操作。

  • 错误处理

  • 若键不存在,抛出 KeyError

  • 适用场景

  • 无需获取被删除的值时。

  • 确定键存在,或希望缺失键时抛出错误。

  • d = {'a': 1, 'b': 2, 'c': 3}
    del d['b']
    print(d)  # 输出: {'a': 1, 'c': 3}

    (2) pop() 方法

  • 语法dict.pop(key[, default])

  • 行为

  • 删除指定键的键值对,返回对应的值

  • 支持设置默认值(default),避免键不存在时抛出错误。

  • 错误处理

  • 若键不存在且未提供默认值,抛出 KeyError

  • 若键不存在但提供默认值,返回默认值而不修改字典。

  • 适用场景

  • 需要获取被删除的值时。

  • 处理可能不存在的键(通过默认值避免错误)。

  • d = {'a': 1, 'b': 2}
    value = d.pop('b')          # 删除键'b',返回2
    print(value, d)             # 输出: 2 {'a': 1}
    
    value = d.pop('x', 'N/A')   # 键不存在,返回'N/A'
    print(value)                # 输出: N/A

    (3) popitem() 方法

  • 语法dict.popitem()

  • 行为

  • 删除并返回字典中的最后一个键值对(Python 3.7+ 因字典有序性)。

  • 返回格式为 (key, value) 元组。

  • 错误处理

  • 若字典为空,抛出 KeyError

  • 适用场景

  • 按插入顺序删除元素(如实现栈、缓存淘汰策略)。

  • 需要同时获取键和值。

  • d = {'a': 1, 'b': 2, 'c': 3}
    item = d.popitem()          # 删除并返回('c', 3)
    print(item, d)              # 输出: ('c', 3) {'a': 1, 'b': 2}

    (4)clear()
            清空字典。

    my_dict.clear()  # 结果: {}
    对比总结
    特性 del dict[key] dict.pop(key) dict.popitem()
    返回值 被删除的值 被删除的键值对元组 (k, v)
    参数 必须指定键 必须指定键(可设默认值) 无参数
    错误处理 键不存在时抛出 KeyError 键不存在时默认抛错或返回默认值 字典为空时抛出 KeyError
    适用场景 简单删除,无需返回值 需获取值或处理缺失键 按顺序删除或获取键值对

    选择建议

  • 使用 del:直接删除键且不关心值。

  • 使用 pop():需要获取被删除的值或处理可能缺失的键。

  • 使用 popitem():按插入顺序删除元素(如LIFO场景)或需要键值对元组。

  • 5、遍历字典

    (1)keys()
  • 功能:返回字典所有键的视图。

  • d = {'a': 1, 'b': 2, 'c': 3}
    keys_view = d.keys()
    print(keys_view)  # 输出: dict_keys(['a', 'b', 'c'])
    
    # 动态更新示例
    d['d'] = 4
    print(keys_view)  # 输出: dict_keys(['a', 'b', 'c', 'd'])

    (2) values()

  • 功能:返回字典所有值的视图。

  • values_view = d.values()
    print(values_view)  # 输出: dict_values([1, 2, 3, 4])

    (3) items()

  • 功能:返回字典所有键值对的视图(元组形式 (key, value))。

  • items_view = d.items()
    print(items_view)  # 输出: dict_items([('a', 1), ('b', 2), ('c', 3), ('d', 4)])

    总结

  • keys():动态访问键,支持集合操作。

  • values():动态访问值,但无法保证唯一性或哈希性。

  • items():动态访问键值对,支持集合操作(键值对需哈希)。

  • (4)遍历所有键

    for key in student.keys():
        print(key)
    # 输出:
    # name
    # age
    # courses

    (5)遍历所有值

    for value in student.values():
        print(value)
    # 输出:
    # Alice
    # 20
    # ['Math', 'Physics']

    (6)遍历所有键值对

    for key, value in student.items():
        print(f"{key}: {value}")
    # 输出:
    # name: Alice
    # age: 20
    # courses: ['Math', 'Physics']

    6、合并字典

    (1)update() 方法

    核心特性
  • 原地修改:直接修改原字典,无返回值(返回None)。

  • 覆盖规则:合并时,相同键的值由新字典覆盖旧值。

  • 版本兼容:适用于所有Python版本。

  • 支持多字典合并:需多次调用或循环处理。

  • d1 = {'a': 1, 'b': 2}
    d2 = {'b': 3, 'c': 4}
    
    d1.update(d2)  # 原地修改d1
    print(d1)      # 输出: {'a': 1, 'b': 3, 'c': 4}
    适用场景
  • 需要直接修改原字典。

  • 合并多个字典(通过循环或链式调用):

  • dicts = [d1, d2, d3]
    result = {}
    for d in dicts:
        result.update(d)

    (2)| 运算符

    核心特性
  • 生成新字典:返回合并后的新字典,原字典不变。

  • 覆盖规则:右侧字典的键覆盖左侧的同名键。

  • 版本要求:仅Python 3.9+ 支持。

  • 链式合并:可直接合并多个字典(如 d1 | d2 | d3)。

  • d1 = {'a': 1, 'b': 2}
    d2 = {'b': 3, 'c': 4}
    
    d3 = d1 | d2  # 生成新字典
    print(d3)      # 输出: {'a': 1, 'b': 3, 'c': 4}
    print(d1)      # 原字典不变: {'a': 1, 'b': 2}
    增强赋值运算符 |=
  • 类似update()
  • d1 |= d2  # 等效于 d1 = d1 | d2(原地修改)
    print(d1)  # 输出: {'a': 1, 'b': 3, 'c': 4}

    使用建议

  • 选择 update() 的场景

  • 需要原地修改原字典。

  • 代码需兼容Python 3.9以下版本。

  • 合并少量字典或需要精确控制合并顺序。

  • 选择 | 运算符的场景

  • 需保留原字典不变,生成新字典。

  • 使用Python 3.9+ 且追求代码简洁性。

  • 链式合并多个字典(如 d1 | d2 | d3)。

  • 性能与内存考虑

  • update():原地操作,内存效率高,适合频繁修改或大字典。

  • |:生成新字典,可能增加内存占用,适合不可变数据或链式操作。

  • 7、补充

    (1)in 关键字
            检查键是否存在。
    if 'name' in my_dict:
        print("键存在")
    (2)len(dict)
            返回字典键的数量。
    print(len(my_dict))  # 输出: 3
    (3) copy()
    创建字典的浅拷贝。
    new_dict = my_dict.copy()
    (4) fromkeys(keys, value)
    通过键列表创建新字典,值统一为 value
    keys = ['a', 'b', 'c']
    new_dict = dict.fromkeys(keys, 0)  # {'a': 0, 'b': 0, 'c': 0}

    8、字典推导式

  • 快速生成字典:
  • squares = {x: x**2 for x in range(5)}          # {0:0, 1:1, 2:4, 3:9, 4:16}
    reversed_dict = {v: k for k, v in d1.items()}  # 反转键值

    9、其他操作

  • 检查存在性'name' in d1 返回 True

  • 长度len(d1) 返回键的数量。

  • 排序sorted(d1.items(), key=lambda x: x[1]) 按值排序键值对。

  • 默认字典from collections import defaultdict 自动处理缺失键。

  • 嵌套字典

  • students = {
        'Alice': {'age': 25, 'grades': [90, 85]},
        'Bob': {'age': 22, 'grades': [78, 88]}
    }
    print(students['Alice']['grades'][0])  # 输出: 90

    注意事项:

  • 键的要求:必须为不可变类型(如字符串、数字、元组)。

  • 有序性:字典保持插入顺序。

  • 性能:基于哈希表,查找、插入、删除平均O(1)时间复杂度。

  • 深浅拷贝d.copy() 浅拷贝,copy.deepcopy() 深拷贝。

  • 【例】安全删除遍历元素

    d = {'a': 1, 'b': 2, 'c': 3}
    for key in list(d.keys()):        # 转换为列表避免遍历时修改
        if key == 'b':
            del d[key]
    print(d)                          # 输出: {'a': 1, 'c': 3}

    作者:晨曦543210

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python字典使用详解

    发表回复