云计算百科
云计算领域专业知识百科平台

Python学习之路-字典(Dictionary)学习详解

改变从不是一蹴而就,而是日积月累的修正。今天的自律,是明天的自由。

学习打卡第十三天

在 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)

六、特征

  • 键值对存储‌:字典以键值对(key-value pairs)的形式存储数据,每个键(key)都唯一对应一个值(value)。
  • 键的唯一性‌:字典中的键必须是唯一的,如果重复定义同一个键,后面的值会覆盖前面的值。
  • 键的不可变性‌:字典的键必须是不可变类型,如字符串、数字或元组等,而值可以是任意类型。
  • 可变性‌:字典是可变对象,可以随时添加、修改或删除键值对。
  • 无序性‌:在 Python 3.7 及以后版本中,字典保持插入顺序,但在较早版本中,字典是无序的。
  • 高效查找‌:通过键访问值的时间复杂度为 O(1),因此字典在查找操作上非常高效。
  • 支持多种操作‌:包括键值对的增删改查、遍历、合并等操作。
  • 这些特性使得 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])

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Python学习之路-字典(Dictionary)学习详解
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!