pin_drop当前位置:知识文库 ❯ 图文

Python字典创建与访问

一、概述

字典(dict)是Python中最常用的数据结构之一,它以键值对(key-value pair)的形式存储数据。字典提供了极快的数据查找速度,是Python中实现映射关系的核心工具。与列表通过索引访问不同,字典通过键来访问对应的值,这使得数据的语义更加清晰。


二、多种创建方式

字面量创建

最常见也最直观的创建方式,使用花括号 {} 包裹键值对,键与值之间用冒号 : 分隔,键值对之间用逗号 , 分隔。

代码示例

student = {
    "name": "张三",
    "age": 20,
    "score": 95.5
}
print(student)
# {'name': '张三', 'age': 20, 'score': 95.5}

也可以创建空字典:

代码示例

empty_dict = {}
print(type(empty_dict))  # <class 'dict'>

注意:空花括号 {} 创建的是字典,不是集合。创建空集合需要使用 set()

dict() 构造函数

使用 dict() 构造函数可以通过多种参数形式创建字典。

使用关键字参数:

代码示例

person = dict(name="李四", age=25, city="北京")
print(person)
# {'name': '李四', 'age': 25, 'city': '北京'}

使用键值对元组列表:

代码示例

pairs = [("a", 1), ("b", 2), ("c", 3)]
d = dict(pairs)
print(d)  # {'a': 1, 'b': 2, 'c': 3}

使用两个列表通过 zip 组合:

代码示例

keys = ["x", "y", "z"]
values = [10, 20, 30]
d = dict(zip(keys, values))
print(d)  # {'x': 10, 'y': 20, 'z': 30}

fromkeys() 方法

fromkeys() 是字典的类方法,用于使用指定的键序列创建新字典,所有键对应的值默认为 None,也可以指定统一的默认值。

代码示例

keys = ["a", "b", "c"]
d1 = dict.fromkeys(keys)
print(d1)  # {'a': None, 'b': None, 'c': None}

d2 = dict.fromkeys(keys, 0)
print(d2)  # {'a': 0, 'b': 0, 'c': 0}

注意fromkeys() 的默认值是共享的,如果默认值是可变对象(如列表),所有键会指向同一个对象。


三、键访问与方括号访问

方括号访问

使用方括号 [] 并传入键来获取对应的值,这是最直接的访问方式。

代码示例

student = {"name": "王五", "age": 22}
print(student["name"])  # 王五
print(student["age"])   # 22

如果访问不存在的键,会抛出 KeyError 异常:

代码示例

print(student["gender"])  # KeyError: 'gender'

键访问的安全方式

为了避免 KeyError,可以使用 get() 方法或 in 运算符先判断键是否存在:

代码示例

if "gender" in student:
    print(student["gender"])
else:
    print("键不存在")

print(student.get("gender", "未知"))  # 未知

四、字典可变性

字典是可变(mutable)数据结构,创建后可以修改其内容:

  • 添加:新的键值对

  • 修改:已有键对应的值

  • 删除:键值对

代码示例

config = {"theme": "dark", "font": 14}

config["language"] = "zh-CN"
print(config)

config["font"] = 16
print(config)

del config["theme"]
print(config)

字典键的限制

字典的键必须是不可变(hashable)类型,如字符串、数字、元组。列表、字典等可变类型不能作为键:

代码示例

valid = {1: "one", "two": 2, (3, 4): "tuple_key"}
print(valid[(3, 4)])  # tuple_key

invalid = {[1, 2]: "list_key"}  # TypeError: unhashable type: 'list'

五、代码示例

综合示例:创建学生信息字典并访问

代码示例

students = {
    "001": {"name": "赵六", "age": 18, "score": 88},
    "002": {"name": "孙七", "age": 19, "score": 92},
    "003": {"name": "周八", "age": 20, "score": 85}
}

print(students["001"]["name"])

for sid in students:
    info = students[sid]
    print(f"学号: {sid}, 姓名: {info['name']}, 成绩: {info['score']}")

new_student = dict.fromkeys(["004", "005", "006"], {"name": "待录入", "score": 0})
students.update(new_student)
print(f"总学生数: {len(students)}")

六、注意事项

  • 键的唯一性:字典中每个键只能出现一次,重复的键后面的值会覆盖前面的值

  • 键的类型限制:键必须是不可变类型(hashable),值可以是任意类型

  • 访问不存在的键:方括号访问不存在的键会抛出 KeyError,建议使用 get() 方法

  • 插入顺序:Python 3.7+ 字典保持插入顺序,但不应依赖此特性进行逻辑判断

  • 空花括号{} 创建的是空字典而非空集合


七、小结

本节介绍了字典的三种主要创建方式:字面量 {}dict() 构造函数和 fromkeys() 类方法。掌握了方括号访问值的方式,了解了字典的可变性特征以及键的限制。字典是Python中功能最丰富的数据结构之一,后续章节将逐一学习其所有内置方法。


八、练习题

练习1

使用两种不同的方式创建一个包含以下信息的字典,并打印结果:

  • "apple""banana""cherry"

  • 352

练习2

给定字典 data = {"x": 10, "y": 20, "z": 30},编写代码安全地访问键 "w" 的值,如果不存在则返回 0,同时尝试修改键 "x" 的值为 100 并添加新键值对 "w": 40

练习参考答案

练习1:字面量 {"apple": 3, "banana": 5, "cherry": 2};构造函数 dict([("apple", 3), ("banana", 5), ("cherry", 2)])
练习2:w_val = data.get("w", 0)data["x"] = 100data["w"] = 40

常见问题

为什么列表不能作为字典的键?

字典的键必须是可哈希的(hashable),而列表是可变类型,不满足可哈希要求。如果列表作为键被修改了,字典就无法正确定位该键。可以使用元组代替列表作为键。

Python 3.7+字典保持插入顺序,这是什么意思?

在Python 3.7+中,当你遍历字典时,元素会按照插入时的顺序返回。比如先插入"a",再插入"b",遍历时也会先得到"a"再得到"b"。但官方建议不应过度依赖此特性进行核心逻辑判断。

{}和dict()创建字典有什么区别?

{}是字面量语法,性能略快;dict()是构造函数,可以从其他数据结构(如键值对列表、关键字参数)创建字典。创建空字典时两者等价,但从已有数据创建时dict()更灵活。

字典的查找为什么很快?

字典底层使用哈希表实现,通过哈希函数将键映射到存储位置,平均查找时间复杂度为O(1)。这使得字典在大规模数据查找时比列表的O(n)线性查找快得多。

小贴士

在Python中,字典是最常用的数据结构之一。它不仅用于数据存储,还广泛用于缓存、配置管理、计数器、分组统计等场景。掌握字典的各种创建和访问方式,能让你的代码更加简洁高效。特别是zip()函数配合dict(),可以快速将两个列表组合成字典,这在数据处理中非常实用。

标签: Python字典 字典创建 键值对 Python基础 dict fromkeys 数据结构

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Python元组命名namedtuple 下一篇: Python字典get方法

poll相关推荐