😇一篇文章带你了解字典 😇

64 阅读5分钟

一、字典的基本概念

字典是 Python 中一种非常实用的数据类型,它由一系列键值对组成,一个键对应一个值,就像现实中的字典里 “单词” 对应 “解释” 一样。

# 定义一个字典,键和值用冒号连接,键值对之间用逗号分隔
y = {"a": "b", "d": "c"}
# 查看字典的类型
print(type(y))  # 输出:<class 'dict'>

字典的键可以是整数、字符串、元组等不可变类型,而值可以是任何数据类型,包括数字、字符串、列表甚至另一个字典。

二、字典的创建方法

除了直接用大括号{}创建,还可以用fromkeys()方法快速创建字典。

# 用fromkeys创建字典,第一个参数是可迭代对象(作为键),第二个参数是所有键对应的默认值
keys = ["name", "age", "gender"]
# 所有键的值都设为None
person = dict.fromkeys(keys)
print(person)  # 输出:{'name': None, 'age': None, 'gender': None}
# 所有键的值都设为"unknown"
person2 = dict.fromkeys(keys, "unknown")
print(person2)  # 输出:{'name': 'unknown', 'age': 'unknown', 'gender': 'unknown'}

三、字典的增删改操作

1. 删除操作

# 定义一个字典
fruits = {"apple": 5, "banana": 3, "orange": 4}
# pop():返回指定键的值,并删除该键值对
# 获取"banana"的值并删除它
banana_count = fruits.pop("banana")
print(banana_count)  # 输出:3
print(fruits)  # 输出:{'apple': 5, 'orange': 4}
# 当要删除的键不存在时,可以设置默认值避免报错
grape_count = fruits.pop("grape", 0)
print(grape_count)  # 输出:0(因为"grape"不存在,返回默认值0)
# popitem():返回字典中最后添加的键值对,并删除它
last_item = fruits.popitem()
print(last_item)  # 输出:('orange', 4)
print(fruits)  # 输出:{'apple': 5}
# clear():清空字典,使它变成空字典
fruits.clear()
print(fruits)  # 输出:{}

2. 修改与添加操作

# 定义一个初始字典
student = {"name": "Tom", "age": 15}
# update():一次修改或添加多个键值对
student.update({"age": 16, "gender": "male", "score": 90})
print(student)  # 输出:{'name': 'Tom', 'age': 16, 'gender': 'male', 'score': 90}
# 解释:"age"的值被修改,"gender""score"是新添加的键值对
# 单个添加或修改:直接通过键赋值
student["hobby"] = "basketball"  # 添加新键值对
student["score"] = 95  # 修改已有键的值
print(student)  # 输出:{'name': 'Tom', 'age': 16, 'gender': 'male', 'score': 95, 'hobby': 'basketball'}

四、字典的值获取方法

# 定义一个字典
book = {"title": "Python入门", "author": "张三", "price": 59}
# get():获取指定键的值
print(book.get("title"))  # 输出:Python入门
# 当键不存在时,可设置默认值
print(book.get("publisher", "未知出版社"))  # 输出:未知出版社("publisher"不存在)
# setdefault():获取指定键的值,若键不存在则添加该键值对
# 键存在时,返回对应的值
print(book.setdefault("author", "李四"))  # 输出:张三
# 键不存在时,返回默认值,并将键和默认值添加到字典
print(book.setdefault("publication_date", "2023-01-01"))  # 输出:2023-01-01
print(book)  # 输出:{'title': 'Python入门', 'author': '张三', 'price': 59, 'publication_date': '2023-01-01'}

五、字典的视图对象

字典的视图对象是动态的,当字典发生变化时,视图对象也会跟着变化,包括keys()(键视图)、values()(值视图)、items()(键值对视图)。

# 定义一个字典
car = {"brand": "Toyota", "color": "red", "price": 150000}
# 获取键视图
keys = car.keys()
print(keys)  # 输出:dict_keys(['brand', 'color', 'price'])
# 可以转换成列表
print(list(keys))  # 输出:['brand', 'color', 'price']
# 获取值视图
values = car.values()
print(values)  # 输出:dict_values(['Toyota', 'red', 150000])
# 获取键值对视图(每个元素是一个包含键和值的元组)
items = car.items()
print(items)  # 输出:dict_items([('brand', 'Toyota'), ('color', 'red'), ('price', 150000)])
# 当字典变化时,视图对象也会变化
car["year"] = 2023
print(keys)  # 输出:dict_keys(['brand', 'color', 'price', 'year'])(新增了"year"键)
# 在较新的Python版本中,可以对值视图进行反向操作
print(list(reversed(values)))  # 输出:[2023, 150000, 'red', 'Toyota']

六、字典的嵌套

字典可以嵌套,也就是字典里的值可以是另一个字典,这时需要多次索引来获取内部的值。

# 定义一个嵌套字典
school = {
    "class1": {
        "teacher": "王老师",
        "students": ["小明", "小红", "小刚"]
    },
    "class2": {
        "teacher": "李老师",
        "students": ["小丽", "小强"]
    }
}
# 获取class1的老师
print(school["class1"]["teacher"])  # 输出:王老师
# 获取class2的学生列表
print(school["class2"]["students"])  # 输出:['小丽', '小强']
# 获取class2的第一个学生
print(school["class2"]["students"][0])  # 输出:小丽

七、字典推导式

字典推导式是一种简洁创建字典的方式,类似列表推导式,还可以进行键值调换、筛选等操作。

1. 基本的字典推导式

# 从列表创建字典,键是数字,值是数字的平方
squares = {x: x**2 for x in [1, 2, 3, 4]}
print(squares)  # 输出:{1: 1, 2: 4, 3: 9, 4: 16}

2. 键值调换

# 原字典
original = {"a": 10, "b": 20, "c": 30}
# 调换键和值,同时添加筛选条件(只保留值大于10的)
swapped = {v: k for k, v in original.items() if v > 10}
print(swapped)  # 输出:{20: 'b', 30: 'c'}

3. 筛选操作

# 原字典:学生姓名和对应的分数
scores = {"小明": 85, "小红": 92, "小刚": 78, "小丽": 95}
# 筛选出分数大于90的学生
high_scores = {name: score for name, score in scores.items() if score > 90}
print(high_scores)  # 输出:{'小红': 92, '小丽': 95}

总结

字典是 Python 中用于存储键值对数据的重要结构,通过本文介绍的方法,我们可以轻松地对字典进行创建、增删改查等操作。视图对象能动态反映字典的变化,嵌套字典适合存储复杂结构的数据,而字典推导式则让字典的创建和处理更加简洁高效。