2.11 Python3 字典

字典(Dictionary)是Python中一种可变容器模型,可存储任意类型对象。

字典的每个键值(key=>value)对用冒号(:)分割,整个字典包括在花括号 {} 中


目录

1. 创建字典

2. 访问字典里的值

3. 修改字典

4. 删除字典元素

5. 字典内置函数

6. 字典内置方法

7. 字典的作用

1. 高效的数据查找与存储

2. 数据关联与结构化存储

3. 计数与统计

4. 缓存与记忆化(Memoization)

5. 配置与设置管理

6. 实现高级数据结构

7. 函数编程应用

8. 数据转换与映射

9. JSON数据处理

10. 替代多重if-else


1. 创建字典

键必须是唯一的,但值则不必。

值可以取任何数据类型,但键必须是不可变的,如字符串,数字。

# 创建空字典
dict1 = {}
dict2 = dict()

# 创建有初始值的字典
dict3 = {'name': 'Alice', 'age': 25}
dict4 = dict(name='Bob', age=30)

# 使用zip创建字典
keys = ['name', 'age']
values = ['Charlie', 35]
dict5 = dict(zip(keys, values))

# 使用字典推导式创建字典
dict6 = {x: x**2 for x in (2, 4, 6)}

2. 访问字典里的值

person = {'name': 'David', 'age': 40}

# 通过键访问值
print(person['name'])  # 输出: David

# 使用get()方法访问(更安全,键不存在时返回None或默认值)
print(person.get('age'))  # 输出: 40
print(person.get('address', 'Not Found'))  # 输出: Not Found

# 获取所有键
print(person.keys())  # 输出: dict_keys(['name', 'age'])

# 获取所有值
print(person.values())  # 输出: dict_values(['David', 40])

# 获取所有键值对
print(person.items())  # 输出: dict_items([('name', 'David'), ('age', 40)]))

3. 修改字典

person = {'name': 'Eva', 'age': 28}

# 更新现有键的值
person['age'] = 29

# 添加新键值对
person['address'] = 'New York'

# 使用update()方法合并字典
person.update({'job': 'Engineer', 'age': 30})  # age会被更新

# 合并字典的另一种方式(Python 3.5+)
other_info = {'hobby': 'reading', 'email': 'eva@example.com'}
person = {**person, **other_info}

4. 删除字典元素

person = {'name': 'Frank', 'age': 45, 'job': 'Doctor'}

# 删除指定键值对
del person['age']

# 使用pop()删除并返回指定键的值
job = person.pop('job')  # job变量现在为'Doctor'

# 使用popitem()删除并返回最后插入的键值对(Python 3.7+保证)
key, value = person.popitem()

# 清空字典
person.clear()  # 现在person是空字典{}

# 删除整个字典
del person

5. 字典内置函数

序号函数及描述实例
1len(dict)
计算字典元素个数,即键的总数。
>>> tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
>>> len(tinydict)
3
2str(dict)
输出字典,可以打印的字符串表示。
>>> tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
>>> str(tinydict)
"{'Name': 'Runoob', 'Class': 'First', 'Age': 7}"
3type(variable)
返回输入的变量类型,如果变量是字典就返回字典类型。
>>> tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
>>> type(tinydict)
<class 'dict'>

person = {'name': 'Grace', 'age': 50}

# len() - 获取字典长度
print(len(person))  # 输出: 2

# str() - 字典的字符串表示
print(str(person))  # 输出: {'name': 'Grace', 'age': 50}

# type() - 检查类型
print(type(person))  # 输出: <class 'dict'>

# sorted() - 获取排序后的键列表
print(sorted(person))  # 输出: ['age', 'name']

6. 字典内置方法

序号函数及描述
1dict.clear()
删除字典内所有元素
2dict.copy()
返回一个字典的浅复制
3dict.fromkeys()
创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
4dict.get(key, default=None)
返回指定键的值,如果键不在字典中返回 default 设置的默认值
5key in dict
如果键在字典dict里返回true,否则返回false
6dict.items()
以列表返回一个视图对象
7dict.keys()
返回一个视图对象
8dict.setdefault(key, default=None)
和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
9dict.update(dict2)
把字典dict2的键/值对更新到dict里
10dict.values()
返回一个视图对象
11dict.pop(key[,default])
删除字典 key(键)所对应的值,返回被删除的值。
12dict.popitem()
返回并删除字典中的最后一对键和值。
# copy() - 浅拷贝字典
original = {'a': 1, 'b': [2, 3]}
new_dict = original.copy()

# fromkeys() - 从序列创建新字典
keys = ['name', 'age', 'job']
default_value = 'unknown'
person = dict.fromkeys(keys, default_value)

# setdefault() - 获取键值,如果键不存在则设置默认值
age = person.setdefault('age', 0)  # 返回'unknown'因为键已存在
salary = person.setdefault('salary', 5000)  # 添加'salary': 5000

# items(), keys(), values() - 视图对象
for key, value in person.items():
    print(f"{key}: {value}")

7. 字典的作用

字典是Python中最强大、最常用的数据结构之一,它以键值对(key-value)的形式存储数据,具有以下重要作用和应用场景:

1. 高效的数据查找与存储

  • 快速访问:通过键(key)可以快速查找对应的值(value),时间复杂度为O(1)

  • 无序集合:存储无需考虑顺序的数据集合(注:Python 3.7+字典保持插入顺序)

2. 数据关联与结构化存储

  • 存储对象属性:如学生信息、商品详情等结构化数据

    student = {
        'name': '张三',
        'age': 20,
        'major': '计算机科学',
        'grades': {'数学': 90, '英语': 85}
    }
  • 表示关系型数据:如数据库记录、API返回的JSON数据等

3. 计数与统计

  • 元素频率统计:统计列表中各元素出现的次数

    from collections import defaultdict
    
    word_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
    word_count = defaultdict(int)
    
    for word in word_list:
        word_count[word] += 1

4. 缓存与记忆化(Memoization)

  • 函数结果缓存:存储昂贵计算的结果以避免重复计算

    cache = {}
    
    def expensive_func(n):
        if n not in cache:
            cache[n] = ...  # 复杂计算过程
        return cache[n]

5. 配置与设置管理

  • 存储程序配置:集中管理应用程序的各种设置

    config = {
        'debug': True,
        'database': {
            'host': 'localhost',
            'port': 5432,
            'user': 'admin'
        },
        'max_connections': 100
    }

6. 实现高级数据结构

  • 模拟图结构:表示图的邻接表

    graph = {
        'A': ['B', 'C'],
        'B': ['A', 'D'],
        'C': ['A', 'D'],
        'D': ['B', 'C']
    }
  • 稀疏矩阵:高效表示大部分元素为0的矩阵

7. 函数编程应用

  • 处理可变关键字参数:在函数定义中使用**kwargs

    def print_info(**kwargs):
        for key, value in kwargs.items():
            print(f"{key}: {value}")
    
    print_info(name='Alice', age=25, city='New York')
  • 动态参数传递:使用字典解包传递参数

    params = {'sep': ' | ', 'end': '\n\n'}
    print('Hello', 'World', **params)

8. 数据转换与映射

  • 值转换:建立映射关系进行数据转换

    month_map = {
        1: 'January',
        2: 'February',
        # ...
        12: 'December'
    }
    print(month_map[3])  # 输出'March'(假设已定义)

9. JSON数据处理

  • 与JSON互转:字典结构与JSON格式天然兼容

    import json
    
    data = {'name': 'John', 'age': 30}
    json_str = json.dumps(data)  # 字典转JSON字符串
    new_dict = json.loads(json_str)  # JSON字符串转字典

10. 替代多重if-else

  • 调度表模式:用字典代替复杂的条件判断

    def operation_add(a, b): return a + b
    def operation_sub(a, b): return a - b
    
    operations = {
        'add': operation_add,
        'subtract': operation_sub
    }
    
    result = operations['add'](5, 3)  # 返回8

字典因其高效的查找性能(O(1)时间复杂度)和灵活的结构,成为Python中处理关联数据的首选工具,广泛应用于Web开发、数据分析、人工智能等各个领域。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值