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" -
值:
3、5、2
练习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"] = 100;data["w"] = 40
常见问题
为什么列表不能作为字典的键?
字典的键必须是可哈希的(hashable),而列表是可变类型,不满足可哈希要求。如果列表作为键被修改了,字典就无法正确定位该键。可以使用元组代替列表作为键。
Python 3.7+字典保持插入顺序,这是什么意思?
在Python 3.7+中,当你遍历字典时,元素会按照插入时的顺序返回。比如先插入"a",再插入"b",遍历时也会先得到"a"再得到"b"。但官方建议不应过度依赖此特性进行核心逻辑判断。
{}和dict()创建字典有什么区别?
{}是字面量语法,性能略快;dict()是构造函数,可以从其他数据结构(如键值对列表、关键字参数)创建字典。创建空字典时两者等价,但从已有数据创建时dict()更灵活。
字典的查找为什么很快?
字典底层使用哈希表实现,通过哈希函数将键映射到存储位置,平均查找时间复杂度为O(1)。这使得字典在大规模数据查找时比列表的O(n)线性查找快得多。
小贴士
在Python中,字典是最常用的数据结构之一。它不仅用于数据存储,还广泛用于缓存、配置管理、计数器、分组统计等场景。掌握字典的各种创建和访问方式,能让你的代码更加简洁高效。特别是zip()函数配合dict(),可以快速将两个列表组合成字典,这在数据处理中非常实用。
本文涉及AI创作
内容由AI创作,请仔细甄别