当前位置: 首页 > article >正文

python中字典用法

在蓝桥杯Python组的竞赛中,字典(dict 是一种非常常用的数据结构,主要用于高效地存储和查找键值对。字典的常见用法包括统计频率、记录索引、优化查找等。以下是字典在蓝桥杯Python组中的常见用法总结:


1. 字典的基本操作

字典的核心特点是 键值对(key-value pair),键是唯一的,值可以重复。

创建字典

# 空字典
d = {}

# 带初始值的字典
d = {'a': 1, 'b': 2}

添加/修改元素

d['c'] = 3  # 添加键值对
d['a'] = 10  # 修改键 'a' 的值

访问元素

value = d['a']  # 获取键 'a' 的值
value = d.get('a', 0)  # 如果键不存在,返回默认值 0

删除元素

del d['a']  # 删除键 'a'
d.pop('a')  # 删除键 'a' 并返回其值

遍历字典

# 遍历键
for key in d:
    print(key, d[key])

# 遍历键值对
for key, value in d.items():
    print(key, value)

2. 字典的常见应用场景

(1)统计频率

字典常用于统计元素出现的次数。

示例:统计列表中每个元素的频率
nums = [1, 2, 2, 3, 3, 3]
freq = {}
for num in nums:
    freq[num] = freq.get(num, 0) + 1
print(freq)  # 输出: {1: 1, 2: 2, 3: 3}

(2)记录索引

字典可以用于记录元素的下标,方便快速查找。

示例:记录列表中每个元素的索引
nums = [10, 20, 30, 20]
index_map = {}
for i, num in enumerate(nums):
    if num not in index_map:
        index_map[num] = []
    index_map[num].append(i)
print(index_map)  # 输出: {10: [0], 20: [1, 3], 30: [2]}

(3)优化查找

字典的查找时间复杂度为 O(1),适合用于优化查找问题。

示例:两数之和

给定一个数组和一个目标值,找到数组中两个数的和等于目标值的索引。

def two_sum(nums, target):
    num_map = {}
    for i, num in enumerate(nums):
        complement = target - num
        if complement in num_map:
            return [num_map[complement], i]
        num_map[num] = i
    return []

nums = [2, 7, 11, 15]
target = 9
print(two_sum(nums, target))  # 输出: [0, 1]

(4)前缀和与哈希表结合

字典常用于记录前缀和及其索引,解决子数组和问题。

示例:寻找和为 k 的最长子数组
def max_subarray_length(nums, k):
    prefix_sum = {0: -1}  # 初始化前缀和为 0 的索引为 -1
    current_sum = 0
    max_length = 0
    for i, num in enumerate(nums):
        current_sum += num
        if current_sum - k in prefix_sum:
            max_length = max(max_length, i - prefix_sum[current_sum - k])
        if current_sum not in prefix_sum:
            prefix_sum[current_sum] = i
    return max_length

nums = [1, -1, 5, -2, 3]
k = 3
print(max_subarray_length(nums, k))  # 输出: 4

(5)去重

字典的键是唯一的,可以用于去重。

示例:列表去重
nums = [1, 2, 2, 3, 3, 3]
unique_nums = list(dict.fromkeys(nums))
print(unique_nums)  # 输出: [1, 2, 3]

3. 字典的高级用法

(1)默认字典(defaultdict

defaultdictcollections 模块中的一个类,可以为字典设置默认值。

示例:统计字符频率
from collections import defaultdict

s = "hello"
freq = defaultdict(int)
for char in s:
    freq[char] += 1
print(freq)  # 输出: defaultdict(<class 'int'>, {'h': 1, 'e': 1, 'l': 2, 'o': 1})

(2)计数器(Counter

Countercollections 模块中的一个类,专门用于统计频率。

示例:统计列表中元素的频率
from collections import Counter

nums = [1, 2, 2, 3, 3, 3]
freq = Counter(nums)
print(freq)  # 输出: Counter({3: 3, 2: 2, 1: 1})

(3)有序字典(OrderedDict

OrderedDictcollections 模块中的一个类,可以保持字典的插入顺序。

示例:保持插入顺序
from collections import OrderedDict

d = OrderedDict()
d['a'] = 1
d['b'] = 2
d['c'] = 3
print(d)  # 输出: OrderedDict([('a', 1), ('b', 2), ('c', 3)])

4. 注意事项

  • 字典的键必须是 不可变类型(如整数、字符串、元组)。
  • 字典的查找和插入操作的时间复杂度是 O(1),但空间复杂度较高。
  • 在蓝桥杯竞赛中,合理使用字典可以大幅优化代码性能。


http://www.kler.cn/a/527762.html

相关文章:

  • 使用大语言模型在表格化网络安全数据中进行高效异常检测
  • 剑指offer 数组 持续更新中...
  • 搜索引擎快速收录:关键词布局的艺术
  • 【电工基础】低压电器元件,低压断路器(空开QF),接触器(KM)
  • 在线课堂小程序设计与实现(LW+源码+讲解)
  • 51单片机开发:串口通信
  • eBay管理工具:提升运营效率的利器
  • UE学习日志#16 C++笔记#2 基础复习2
  • 【股票数据API接口44】如何获取股票指历史分时MA数据之Python、Java等多种主流语言实例代码演示通过股票数据接口获取数据
  • sublime_text的快捷键
  • C++11新特性之tuple元组
  • Day49:添加字典元素
  • CSS 背景与边框:从基础到高级应用
  • I2C基础知识
  • 【项目集成Husky】
  • MATLAB中lineBoundary函数用法
  • Snowflake企业权限管理
  • 动态规划DP 最长上升子序列模型 导弹防御模型(题目分析+C++完整代码实现)
  • 基于Hutool的Merkle树hash值生成工具
  • 使用Pygame制作“贪吃蛇”游戏
  • 深度学习篇---深度学习框架
  • 设计模式Python版 桥接模式
  • X86路由搭配rtl8367s交换机
  • 计算机网络之物理层通信基础(信道、信号、带宽、码元、波特、速率、信源与信宿等基本概念)
  • IBM数据与人工智能系列 安装 IBM 编程助手
  • Baklib在企业知识管理中的突出优势与其他工具的深度对比研究