Python基础数据类型与变量—字典

0 阅读3分钟

1 定义

字典 (Dictionary) 是用于存储键值对 (key-value pairs) 的数据类型。 字典是可变的,键必须是唯一的且不可变的 (例如字符串、数字或元组),值可以是任意类型。
可以使用花括号 {} 或 dict() 函数创建字典。

代码:

# 创建字典
dict1 = {"name": "Alice", "age": 30, "city": "New York"}
dict2 = dict([("name", "Bob"), ("age", 25)]) # 使用键值对列表创建
print(f"字典1: {dict1}, 字典2: {dict2}")

结果:

2 访问元素

可以通过键来访问字典中的值

代码:

# 访问元素
print(f"姓名: {dict1['name']}, 年龄: {dict1['age']}")

结果:

3 添加/修改元素

可以通过键来添加新的键值对,或者修改已存在的键值对。

代码:

# 添加/修改元素
dict1["gender"] = "Female" # 添加新的键值对
dict1["age"] = 31 # 修改已存在的键值对
print(f"添加/修改元素后的字典1: {dict1}")

结果:

4 删除元素

del:删除指定键的键值对。
pop():删除指定键的键值对,并返回对应的值。
clear():清空字典中的所有键值对。

代码:

# 删除元素
del dict1["city"] # 删除键 "city"
print(f"del删除元素后的字典1: {dict1}")
age = dict1.pop("age") # 删除键 "age" 并返回对应的值
print(f"pop删除元素后的字典1: {dict1}, 删除的年龄: {age}")
dict1.clear() # 清空字典
print(f"clear清空后的字典1: {dict1}")

结果:

5 常用方法

keys():返回字典中所有键的集合。
values():返回字典中所有值的集合。
items():返回字典中所有键值对的集合,每个键值对表示为一个元组。
get():根据键获取值,如果键不存在,返回指定的默认值 (默认为 None),避免 KeyError 异常。

代码:

# 常用方法
dict2 = {"name": "Bob", "age": 25, "city": "London"}
print(f"所有键: {dict2.keys()}")
print(f"所有值: {dict2.values()}")
print(f"所有键值对: {dict2.items()}")
print(f"获取姓名: {dict2.get('name')}, 获取性别(不存在): {dict2.get('gender', 'Unknown')}") # 使用 get() 方法避免 KeyError

结果:

6 字典推导式

代码:

# 字典推导式
squares = {x: x**2 for x in range(5)} # 创建 0-4 的平方字典
print(f"0-4的平方字典: {squares}")

结果:

7 案例

①根据某个条件筛选字典中的键值对

代码:

#根据某个条件筛选字典中的键值对
def filter_dict(d, min_age):
    """
    筛选年龄大于 min_age 的人.

    Args:
        d: 待筛选的字典.
        min_age: 最小年龄.

    Returns:
        筛选后的字典.
    """
    return {name: age for name, age in d.items() if age > min_age}

people = {"Alice": 30, "Bob": 25, "Charlie": 40, "David": 20}
print(f"筛选年龄大于28的人: {filter_dict(people, 28)}")

结果:

②统计单词出现的频率

代码:

#统计单词出现的频率
def word_frequency(text):
    """
    统计单词出现的频率.

    Args:
        text: 文本字符串.

    Returns:
        单词频率字典.
    """
    words = text.lower().split()  # 转换为小写并分割成单词列表
    frequency = {}
    for word in words:
        frequency[word] = frequency.get(word, 0) + 1 # 使用 get() 方法
    return frequency

text = "This is a test. This is only a test."
print(f"单词频率: {word_frequency(text)}")

结果:

③实现一个简单的缓存

代码:

#实现一个简单的缓存
cache = {} # 使用字典作为缓存
def expensive_function(n):
    """
    模拟一个耗时的函数.

    Args:
        n: 输入参数.

    Returns:
        耗时的计算结果.
    """
    if n in cache: # 检查缓存
        print(f"从缓存中获取结果: {n}")
        return cache[n]
    else:
        print(f"计算结果: {n}")
        result = n * 2 # 模拟耗时计算
        cache[n] = result # 存储到缓存
        return result

print(expensive_function(5))
print(expensive_function(5)) # 从缓存中获取
print(expensive_function(10))

结果:

7 应用场景

  • 存储配置信息
  • 缓存数据
  • Web 开发 (例如存储用户信息)
  • 数据分析 (例如统计词频)
  • 表示 JSON 数据