改变从不是一蹴而就,而是日积月累的修正。今天的自律,是明天的自由。
学习打卡第十三天
在 Python 中,字典(Dictionary)是一种非常实用的可变容器模型,它能够存储任意类型的对象,在数据处理、配置管理等场景中有着广泛的应用。
一、字典的基本概念
字典由一系列键值对(key:value)组成,其基本格式如下:
dic = {key1: value1, key2: value2, key3: value3}
- 每个键值对用冒号(:)分割
- 不同键值对之间用逗号(,)分隔
- 整个字典包含在花括号({})中
- 键(key)必须是唯一的,而值(value)可以重复
- 值可以是任何数据类型,如字符串、数字、列表、字典等,但键必须是不可变的,例如字符串、数字、元组等,列表等可变类型不能作为键。
二、创建字典
1.使用大括号({})创建
这是最常用的创建字典的方式,既可以创建空字典,也可以创建包含键值对的字典
# 创建空字典
empty_dict = {}
# 创建包含键值对的字典
sample_dict = {
"name": "乔峰",
"age": 24,
"city": "丐帮"
}
print("空字典:", empty_dict)
print("包含键值对的字典:", sample_dict)
2.使用内置函数 dict() 创建
dict() 函数也可以用于创建字典,同样可以创建空字典或带有键值对的字典
# 使用dict()函数创建空字典
empty_dict = dict()
# 使用dict()函数创建带有键值对的字典
sample_dict = dict(name="Alice", age=25, city="Beijing")
# 使用dict()函数从键值对列表创建字典
pairs_dict = dict([("name", "Bob"), ("age", 30), ("city", "Shanghai")])
# 使用dict()函数从关键字参数创建字典
kwargs_dict = dict(key1="value1", key2="value2")
print("空字典:", empty_dict)
print("关键字参数字典:", sample_dict)
print("键值对列表字典:", pairs_dict)
print("关键字参数字典:", kwargs_dict)
1. dict()函数可以创建空字典,也可以通过不同参数形式创建带键值对的字典。
2. 支持关键字参数、键值对列表等多种创建方式。
3. 与大括号{}语法相比,dict()函数提供了更多创建字典的灵活性。
三、访问字典的值
1.基本访问
这是最常用的方法,通过键来访问对应的值
# 创建字典
person = {
"name": "乔峰",
"age": 25,
"city": "大宋"
}
# 访问值
name = person["name"]
age = person["age"]
print(f"姓名: {name}, 年龄: {age}") # 输出:姓名: 乔峰, 年龄: 25
2.使用get()方法访问值
get()方法是访问字典值的另一种方式,它比方括号访问更安全
# 创建字典
student = {
"name": "张三",
"grade": "大二",
"major": "计算机科学"
}
# 使用get()方法访问值
name = student.get("name")
major = student.get("major")
# 如果键不存在,get()返回None(或指定的默认值)
phone = student.get("phone", "未提供")
print(f"姓名: {name}, 专业: {major}, 电话: {phone}")
输出:姓名: 张三, 专业: 计算机科学, 电话: 未提供
3.访问嵌套字典中的值
当字典的值也是字典时,可以通过多层访问
# 创建嵌套字典
company = {
"name": "科技公司",
"address": {
"city": "上海",
"district": "浦东新区"
},
"employees": [
{"name": "王五", "position": "工程师"},
{"name": "赵六", "position": "设计师"}
]
}
# 访问嵌套值
city = company["address"]["city"]
first_employee = company["employees"][0]["name"]
print(f"公司所在城市: {city}")
print(f"第一个员工: {first_employee}")
# 输出:公司所在城市: 上海
# 输出:第一个员工: 王五
4.使用for循环遍历字典值
# 创建字典
scores = {
"数学": 95,
"英语": 88,
"语文": 92
}
# 遍历所有值
print("所有成绩:")
for score in scores.values():
print(score)
# 遍历键值对
print("\\n所有科目和成绩:")
for subject, score in scores.items():
print(f"{subject}: {score}")
5.安全访问字典值的方法
# 创建字典
data = {
"username": "user123",
"email": "user@example.com"
}
# 安全访问方法
def safe_get(dictionary, key, default=None):
return dictionary.get(key, default)
# 使用示例
username = safe_get(data, "username")
phone = safe_get(data, "phone", "未提供")
print(f"用户名: {username}")
print(f"电话: {phone}")
6.使用in关键字检查键是否存在
# 创建字典
settings = {
"theme": "dark",
"language": "zh-CN"
}
# 检查键是否存在
if "theme" in settings:
print(f"主题设置: {settings['theme']}")
if "notifications" not in settings:
print("通知设置未配置")
7.处理键不存在的情况
# 创建字典
config = {
"debug": True,
"port": 8080
}
# 方法1: 使用try-except
try:
value = config["host"]
except KeyError:
print("主机配置不存在")
# 方法2: 使用get()方法
host = config.get("host", "localhost")
print(f"主机地址: {host}")
8.访问列表中的字典元素
# 创建包含字典的列表
users = [
{"name": "张三", "age": 25},
{"name": "李四", "age": 30},
{"name": "王五", "age": 28}
]
# 访问列表中字典的值
first_user_name = users[0]["name"]
second_user_age = users[1]["age"]
print(f"第一个用户: {first_user_name}, 第二个用户年龄: {second_user_age}")
四、修改字典中的值
1.直接赋值更新
这是最直接的方法,通过键名直接给值赋新值
# 创建字典
student = {
"name": "张三",
"age": 20,
"grade": "大二"
}
# 更新现有键的值
student["age"] = 21
student["grade"] = "大三"
print(student) # {'name': '张三', 'age': 21, 'grade': '大三'}
2.使用update()方法
update()方法可以一次更新多个键值对:
# 创建字典
product = {
"name": "笔记本电脑",
"price": 5000,
"brand": "联想"
}
# 使用update()方法更新多个值
product.update({"price": 4500, "brand": "华为"})
print(product) # {'name': '笔记本电脑', 'price': 4500, 'brand': '华为'}
# 也可以传入关键字参数
product.update(name="台式电脑", price=3000)
print(product) # {'name': '台式电脑', 'price': 3000, 'brand': '华为'}
3.使用setdefault()方法
setdefault()方法如果键不存在则添加键值对,如果存在则返回原值:
# 创建字典
config = {
"theme": "dark",
"language": "zh-CN"
}
# 更新已存在的键
config.setdefault("theme", "light") # 返回"dark",不改变原值
print(config["theme"]) # "dark"
# 添加新键值对
config.setdefault("font_size", 14) # 添加新键值对
print(config) # {'theme': 'dark', 'language': 'zh-CN', 'font_size': 14}
4.更新嵌套字典中的值
company = {
"name": "科技公司",
"address": {
"city": "上海",
"district": "浦东新区"
}
}
# 更新嵌套字典中的值
company["address"]["city"] = "深圳"
company["address"]["district"] = "南山区"
print(company) # {'name': '科技公司', 'address': {'city': '深圳', 'district': '南山区'}}
5.条件性更新
# 创建字典
scores = {
"数学": 85,
"英语": 92,
"语文": 78
}
# 只有当分数低于某个值时才更新
if scores["数学"] < 90:
scores["数学"] = 90
print(scores) # {'数学': 90, '英语': 92, '语文': 78}
6.使用字典推导式更新
# 创建字典
numbers = {"a": 1, "b": 2, "c": 3}
# 使用字典推导式更新值(将所有值乘以2)
updated_numbers = {key: value * 2 for key, value in numbers.items()}
print(updated_numbers) # {'a': 2, 'b': 4, 'c': 6}
7.使用for循环批量更新
# 创建字典
prices = {"苹果": 5, "香蕉": 3, "橙子": 4}
# 批量更新价格(增加10%)
for fruit in prices:
prices[fruit] = round(prices[fruit] * 1.1, 2)
print(prices) # {'苹果': 5.5, '香蕉': 3.3, '橙子': 4.4}
8.合并字典更新
# 创建两个字典
dict1 = {"a": 1, "b": 2}
dict2 = {"b": 20, "c": 30}
# 合并更新dict1
dict1.update(dict2)
print(dict1) # {'a': 1, 'b': 20, 'c': 30}
这些方法提供了灵活的方式来更新字典中的值,可以根据具体需求选择合适的方法。直接赋值适合单个值更新,update()方法适合批量更新,而嵌套字典的更新需要多层访问。
五、删除字典元素
1.使用 del 语句删除指定键值对
# 创建字典
student = {
"name": "张三",
"age": 25,
"grade": "大二"
}
# 删除指定键值对
del student["grade"]
print(student) # {'name': '张三', 'age': 25}
2.使用 pop() 方法删除并返回值
# 创建字典
student = {
"name": "张三",
"age": 25,
"grade": "大二"
}
# 删除并返回值
grade = student.pop("grade")
print(f"删除的值: {grade}") # 删除的值: 大二
print(student) # {'name': '张三', 'age': 25}
# 键不存在时设置默认值
phone = student.pop("phone", "未提供")
print(f"电话: {phone}") # 电话: 未提供
3. 使用 popitem() 方法删除最后一个键值对
popitem() 方法删除并返回字典中的任意键值对(在 Python 3.7+ 中保证删除最后一个):
# 创建字典
student = {
"name": "张三",
"age": 25,
"grade": "大二"
}
# 删除最后一个键值对
last_item = student.popitem()
print(f"删除的键值对: {last_item}") # 删除的键值对: ('grade', '大二')
print(student) # {'name': '张三', 'age': 25}
4.使用 clear() 方法清空所有元素
使用 clear() 方法可以清空字典中的所有元素,字典本身仍然存在,慎用。
# 示例字典
student = {'name': '张三', 'age': 20, 'score': 85, 'city': '北京'}
student.clear()
print("使用 clear 清空字典后:", student)
5.删除整个字典
使用 del 语句可以删除整个字典,删除后字典不再存在,慎用。
# 示例字典
student = {'name': '张三', 'age': 20, 'score': 85, 'city': '北京'}
del student # 删除字典
# 此时访问 tinydict 会抛出 NameError 错误
print(student)
六、特征
这些特性使得 Python 字典在处理需要快速查找和动态更新的数据时非常有用。
七、字典常用内置函数
1.len() 函数
用于获取字典中键值对的数量
my_dict = {"name": "Alice", "age": 25, "city": "New York"}
print(len(my_dict)) # 输出: 3
2.type() 函数
用于获取对象的类型
my_dict = {"name": "Alice", "age": 25, "city": "New York"}
print(type(my_dict)) # 输出: <class 'dict'>
3.str() 函数
将字典转换为字符串表示形式
my_dict = {"name": "Alice", "age": 25, "city": "New York"}
print(str(my_dict)) # 输出: {'name': 'Alice', 'age': 25, 'city': 'New York'}
八、字典常用内置方法
1.get(key[, default]) 方法
返回指定键对应的值,如果键不存在,则返回 default(如果未指定 default,则返回 None)
my_dict = {"name": "Alice", "age": 25, "city": "New York"}
print(my_dict.get("name")) # 输出: Alice
print(my_dict.get("job", "Not Found")) # 输出: Not Found
2.setdefault(key[, default]) 方法
如果键存在于字典中,则返回其对应的值;如果键不存在,则将键添加到字典中,并将其值设置为 default(如果未指定 default,则设置为 None)
my_dict = {"name": "Alice", "age": 25}
gender = my_dict.setdefault("gender", "Unknown")
print(gender) # 输出: Unknown
print(my_dict) # 输出: {'name': 'Alice', 'age': 25, 'gender': 'Unknown'}
3.update([other]) 方法
用于将一个字典的键值对更新到另一个字典中。它可以接受另一个字典或可迭代对象作为参数
dict1 = {"key1": "value1", "key2": "value2"}
dict1.update({"key1": "new_value"}) # 键存在时更新值
print(dict1) # 输出: {'key1': 'new_value', 'key2': 'value2'}
dict1.update({"key3": "value3"}) # 键不存在时插入新键值对
print(dict1) # 输出: {'key1': 'new_value', 'key2': 'value2', 'key3': 'value3'}
4.clear() 方法
my_dict = {"name": "Alice", "age": 25}
my_dict.clear()
print(my_dict) # 输出: {}
5.copy() 方法
返回字典的一个浅拷贝
original_dict = {"name": "Alice", "age": 25}
new_dict = original_dict.copy()
print(new_dict) # 输出: {'name': 'Alice', 'age': 25}
6.fromkeys() 方法
用于创建一个新字典,以序列中的元素作为键,value 作为所有键对应的初始值
keys = ["name", "age", "city"]
default_value = "Unknown"
new_dict = dict.fromkeys(keys, default_value)
print(new_dict) # 输出: {'name': 'Unknown', 'age': 'Unknown', 'city': 'Unknown'}
7.items() 方法
以列表形式返回可遍历的(键,值)元组数组
my_dict = {"name": "Alice", "age": 25}
print(my_dict.items()) # 输出: dict_items([('name', 'Alice'), ('age', 25)])
8.keys() 方法
以列表形式返回字典中所有的键
my_dict = {"name": "Alice", "age": 25}
print(my_dict.keys()) # 输出: dict_keys(['name', 'age'])
9.values() 方法
以列表形式返回字典中所有的值
my_dict = {"name": "Alice", "age": 25}
print(my_dict.values()) # 输出: dict_values(['Alice', 25])
网硕互联帮助中心





评论前必须登录!
注册