Python基础 : 字典(Dict)

Python基础 : 字典(Dict)



一、知识点详解

1.1 字典定义

  • 字典是一种 可变的 数据结构,用于存储键值对(key - value)。
  • 键和值用 : 连接,不同键值对用 , 分隔。
  • 键必须是 不可变类型(数字、字符串、元组)。
  • 值可以是 任意类型,甚至是另一个字典。
  • 字典的 无序性 :
    • Python 3.6及之前, 字典是无序的,遍历顺序与插入顺序无关,由哈希值决定
    • Python 3.7+, 正式规定字典按插入顺序输出
    • 注意 : 有序性仅指保留插入顺序,与键值 排序 无关。若需排序,仍需使用sorted()

1.2 创建字典

# 创建空字典
empty_dict1 = {}  # 推荐:简洁高效
empty_dict2 = dict()  # 适用于动态创建场景

# 创建包含数据的字典
# 方式1:直接字面量(最简洁直观)
my_cat = {
    "name": "咪咪",
    "age": 2,
    "hobbies": ["睡觉", "吃鱼"]  # 值可以是任意类型
}

# 方式2:dict()构造函数(灵活多变)
# 关键字参数(键必须是合法标识符)
person = dict(name="小明", age=18, gender="男")
# 元组列表(适合动态生成数据)
items = [("apple", 5), ("banana", 3), ("orange", 4)]
fruits = dict(items)
# zip()函数(键值分别来自两个列表)
keys = ["城市", "邮编"]
values = ["北京", "100000"]
address = dict(zip(keys, values))

# 方式3: fromkeys()方法(批量生成相同值的键)
default_user = dict.fromkeys(["name", "age", "email"], "未设置")
print(default_user)  # 输出: {'name': '未设置', 'age': '未设置', 'email': '未设置'}
# 默认值可省略
default_user = dict.fromkeys(["name", "age", "email"])
print(default_user)  # 输出: {'name': None, 'age': None, 'email': None}

# 注意:fromkeys()的陷阱 - 值是引用类型(如列表、字典、集合等可变对象)时
shared_list = dict.fromkeys(["a", "b"], [])
shared_list["a"].append(1)
print(shared_list)  # 输出: {'a': [1], 'b': [1]}  所有值共享同一个列表!

1.3 访问字典数据

  1. 基本访问

    # 键不存在时, 会报错KeyError
    print(my_cat["name"])  # 输出:咪咪
    

    错误案例

    print(my_cat["weight"])  # 报错KeyError
    
  2. 避免报错的安全访问

    # 当键不存在时,get()不会报错
    # dict.get(键, 默认值)
    # 若要访问的键不存在,返回预设的默认值,不写默认值,则返回None
    print(my_cat.get("weight"))  # 输出:None
    print(my_cat.get("weight", "未记录"))  # 输出:未记录
    

1.4 修改与添加数据

  1. 修改已有键的值

    my_cat["age"] = 3  # 年龄更新为3岁
    
  2. 添加新键值对

    my_cat["color"] = "white"  # 添加颜色为白色
    

    简单理解修改添加使用同一个方法dict[键]=值,遵循有则修改,无则添加原则。

1.5 删除数据

  1. del语句 - 永久删除

    del my_cat["color"]  # 删除颜色信息
    # 若键不存在,则报错KeyError
    
  2. pop() - 删除并返回值

    # 若键不存在,则报错KeyError
    age = my_cat.pop("age")  # 返回3并删除该键
    
    # 安全删除
    age = my_cat.pop("age", "已删除") 
    # 若键存在,返回要删除键的值
    # 若键不存在,返回预设的默认值(这里是"已删除"),不会报错
    
  3. popitem() - 删除最后插入的项 (Python3.7+)

    last_item = my_cat.popitem()  
    # Python 3.7+ 才保证删除最后插入的项
    # 之前版本是随机删除
    # 若字典为空,则报错:KeyError
    
  4. clear() - 清空字典

    my_cat.clear()  # 变为{} 
    

    注意:删除不存在的键会报错,建议先用in检查。

    # 安全删除建议
    if "color" in my_cat:
        del my_cat["color"]
    

二、说明示例

# 1. 创建字典
cat = {"id": 1, "name": "咪咪", "species": "猫", "age": 2}
dog = dict([("id", 2), ("name", "大黄"), ("species", "狗")])
template = dict.fromkeys(["id", "name", "species"], "未登记")

# 2. 访问数据
print(cat["name"])          # 直接访问:咪咪
print(dog.get("age", 0))    # 安全访问:0(默认值)

# 3. 修改与添加
cat["age"] = 3              # 修改
dog["age"] = 4              # 添加

# 4. 删除数据
del cat["species"]          # 删除指定键
cat.pop("age")              # 删除并返回值
cat.popitem()               # 删除最后插入的键(3.7+)
dog.clear()                 # 清空字典

三、知识点总结

3.1 字典定义

  • 键值对存储:可变数据结构,通过唯一键关联值,键必须为不可变类型(数字、字符串、元组),值可为任意类型。
  • 有序性:Python 3.7+ 按插入顺序维护键的顺序(非排序,仅保留插入顺序)。

3.2 创建字典

  • 空字典{}dict()(构造函数)。
  • 含数据字典
    • 直接键值对(最常用);
    • dict() 构造函数(支持关键字参数、元组列表、zip 键值列表);
    • fromkeys():批量创建键,值默认为 None 或指定默认值(注意:默认值为可变对象时共享引用)。

3.3 访问数据

  • 直接访问dict[键],键不存在时报 KeyError
  • 安全访问dict.get(键, 默认值),键不存在时返回默认值(默认为 None),避免报错。

3.4 修改与添加数据

  • 统一操作:通过 dict[键] = 值 实现,键存在则修改值,不存在则添加新键值对(“有则改,无则加”)。

3.5 删除数据

  • del:永久删除指定键值对,键不存在时报错。
  • pop(键):删除并返回键对应的值,可指定默认值避免报错。
  • popitem()(3.7+):删除并返回最后插入的键值对(早期版本随机删除)。
  • clear():清空字典所有键值对,保留空字典。
  • 安全删除:删除前用 if 键 in 字典 检查键是否存在。

3.6 常见错误

  • 键重复导致数据覆盖
  • 使用列表等可变类型作为键。如{[1,2]: "error"}会报错。

四、知识点考察题

d = {0: 'no', 1: 'yes', True: 'ok'}
print(len(d), d[0], d[1], d[True])

以上代码的输出结果是什么( )❓

  • A. 3 no yes ok
  • B. 3 no ok ok
  • C. 2 no ok ok
  • D. 2 no yes yes

答案:C


关注公众号「安于欣」获取更多Python技巧
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值