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

Python 字典 (Dictionary) 详解

文章目录

  • 字典
    • 1.基本特性
    • 2.创建字典
    • 3.访问元素
    • 4.修改字典
    • 5.删除元素
    • 6.字典遍历
    • 7.字典的高级特性
      • 默认字典 (collections.defaultdict)
      • 有序字典
      • 计数器
    • 8.字典的视图对象
    • 9.字典与JSON
    • 10.性能考虑
    • 11.适用场景
  • 小结

字典

字典是python中最重要,最常用的数据结构之一,它提供了高效的键值对存储和查找能力。

1.基本特性

  • 键值对集合:存储数据形式为 key: value 对
  • 无序性:Python 3.7+ 开始保持插入顺序(实现细节,应视为无序)
  • 可变性:可以动态添加、修改、删除键值对
  • 键的唯一性:每个键必须是唯一的
  • 键的可哈希性:键必须是不可变类型(如字符串、数字、元组等)
  • 高效查找:基于哈希表实现,查找时间复杂度接近 O(1)

2.创建字典

# 使用花括号(最常用)
d1 = {'name': 'Alice', 'age': 25}# 使用 dict() 构造函数
d2 = dict(name='Bob', age=30)  # 键作为关键字参数
d3 = dict([('name', 'Charlie'), ('age', 35)])  # 从键值对序列# 字典推导式
d4 = {x: x**2 for x in range(5)}  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}# fromkeys 方法 - 为多个键设置相同的默认值
keys = ['a', 'b', 'c']
d5 = dict.fromkeys(keys, 0)  # {'a': 0, 'b': 0, 'c': 0}# 空字典
empty_dict = {}
empty_dict2 = dict()

3.访问元素

person = {'name': 'Alice', 'age': 25, 'city': 'New York'}# 通过键访问
print(person['name'])  # 'Alice'# 使用 get() 方法(避免KeyError)
print(person.get('age'))      # 25
print(person.get('country'))  # None
print(person.get('country', 'USA'))  # 指定默认值 'USA'# 检查键是否存在
print('name' in person)     # True
print('country' in person)  # False# 获取所有键、值、键值对
print(person.keys())    # dict_keys(['name', 'age', 'city'])
print(person.values())  # dict_values(['Alice', 25, 'New York'])
print(person.items())   # dict_items([('name', 'Alice'), ('age', 25), ('city', 'New York')])

4.修改字典

person = {'name': 'Alice', 'age': 25}# 添加/修改元素
person['city'] = 'New York'  # 添加
person['age'] = 26           # 修改# update() 方法 - 批量更新
person.update({'age': 27, 'country': 'USA'})# setdefault() - 如果键不存在则设置默认值
person.setdefault('gender', 'female')  # 返回 'female'
person.setdefault('name', 'Bob')      # 不修改,返回 'Alice'# 合并字典 (Python 3.9+)
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
merged = dict1 | dict2  # {'a': 1, 'b': 3, 'c': 4}

5.删除元素

person = {'name': 'Alice', 'age': 25, 'city': 'New York'}# del 语句
del person['age']# pop() - 删除并返回指定键的值
city = person.pop('city')  # 返回 'New York'# popitem() - 删除并返回最后插入的键值对 (Python 3.7+)
key, value = person.popitem()  # 可能是任意项(Python 3.7前)# clear() - 清空字典
person.clear()  # {}# 注意:删除不存在的键会引发 KeyError

6.字典遍历

scores = {'Alice': 85, 'Bob': 92, 'Charlie': 78}# 遍历键
for name in scores:print(name)for name in scores.keys():print(name)# 遍历值
for score in scores.values():print(score)# 遍历键值对
for name, score in scores.items():print(f"{name}: {score}")# 带索引的遍历 (Python 3.7+ 保持插入顺序)
for i, (name, score) in enumerate(scores.items()):print(f"{i+1}. {name}: {score}")

7.字典的高级特性

默认字典 (collections.defaultdict)

from collections import defaultdict# 为不存在的键提供默认值
word_counts = defaultdict(int)  # 默认值为 int() 即 0
word_counts['apple'] += 1  # 自动初始化为0然后加1# 复杂默认值
grouped_data = defaultdict(list)
grouped_data['fruits'].append('apple')

有序字典

from collections import OrderedDict# 保持元素插入顺序(Python 3.7+ 普通字典也保持顺序)
od = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3

计数器

from collections import Counter# 统计元素出现次数
words = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
word_counts = Counter(words)
print(word_counts.most_common(2))  # [('apple', 3), ('banana', 2)]

8.字典的视图对象

字典的keys(),values(),items()返回的是视图对象:

d = {'a': 1, 'b': 2}
keys = d.keys()# 视图是动态的
d['c'] = 3
print(keys)  # dict_keys(['a', 'b', 'c'])# 支持集合操作
d1 = {'a': 1, 'b': 2}
d2 = {'b': 3, 'c': 4}
print(d1.keys() & d2.keys())  # {'b'}
print(d1.keys() - d2.keys())  # {'a'}

9.字典与JSON

import json# 字典转JSON
person = {'name': 'Alice', 'age': 25}
json_str = json.dumps(person)  # '{"name": "Alice", "age": 25}'# JSON转字典
person_dict = json.loads(json_str)

10.性能考虑

  1. 查找速度快:接近 O(1) 时间复杂度
  2. 内存占用较大:比列表等结构占用更多内存
  3. 键的选择:
    • 使用简单、不可变对象作为键
    • 避免使用复杂对象作为键
    • 字符串是最常用的键类型

11.适用场景

  1. 存储对象属性或配置信息
  2. 快速查找表
  3. 实现稀疏数据结构
  4. 缓存计算结果(Memoization)
  5. 数据分组和聚合
  6. JSON数据交互

小结

  1. 字典键必须是可哈希的(不可变类型)
    • 允许:字符串、数字、元组(仅包含可哈希元素)
    • 不允许:列表、字典、集合等可变类型
  2. 比较操作:
    • == 比较键值对内容
    • != 判断是否不相等
    • 没有 <, > 等比较操作
  3. 字典在Python 3.6及之前是无序的,3.7+开始保持插入顺序(作为实现细节,3.7正式成为语言特性)

字典是Python中最灵活和强大的数据结构之一,熟练掌握字典的使用可以极大提高Python编程效率和代码质量。


文章转载自:
http://aquafarm.aaladrg.cn
http://barret.aaladrg.cn
http://ambulacral.aaladrg.cn
http://bilocular.aaladrg.cn
http://chromatography.aaladrg.cn
http://catecholaminergic.aaladrg.cn
http://attic.aaladrg.cn
http://cappelletti.aaladrg.cn
http://bluff.aaladrg.cn
http://chaffinch.aaladrg.cn
http://brutalist.aaladrg.cn
http://abraham.aaladrg.cn
http://chiropodist.aaladrg.cn
http://choleric.aaladrg.cn
http://applewife.aaladrg.cn
http://cankerroot.aaladrg.cn
http://benignly.aaladrg.cn
http://amnicolous.aaladrg.cn
http://boomtown.aaladrg.cn
http://brock.aaladrg.cn
http://checkerman.aaladrg.cn
http://beng.aaladrg.cn
http://browsability.aaladrg.cn
http://cease.aaladrg.cn
http://babylonian.aaladrg.cn
http://captress.aaladrg.cn
http://bleeding.aaladrg.cn
http://antique.aaladrg.cn
http://airbound.aaladrg.cn
http://champak.aaladrg.cn
http://www.dtcms.com/a/281500.html

相关文章:

  • AI产品经理面试宝典第18天:AI思维矩阵构建与实战应用面试题与答法
  • 2HDMI/1DP转EDP/LVDS,支持4K,144HZ和240HZ.
  • zynq分频的例子
  • python学智能算法(十九)|SVM基础概念-超平面
  • Python语法入门之装饰器的基本用法
  • 硬件设计学习DAY1——电源的分类
  • js运算符
  • Java线程池深度解析与Spring Boot实战指南
  • 文献阅读 250715-Atmospheric rivers cause warm winters and extreme heat events
  • 服务器数据恢复—光纤存储硬盘扇区不稳定导致业务中断如何恢复数据?
  • 【物联网】基于树莓派的物联网开发【9】——树莓派修正系统时间五种解决方案
  • next.js 登录认证:使用 github 账号授权登录。
  • Postgresql源码(147)Nestloop流程与Instrumentation简单分析
  • 24.找到列表中最大或最小值的索引
  • 什么是私有化部署企业即时通讯?吱吱企业即时通讯安全吗?
  • frp内网穿透(二)
  • 【实时Linux实战系列】实时嵌入式系统开发基础
  • Java的stream流其一
  • 美图RoboNeo发布:一句话修图建站 | AI早报
  • Rembg开源项目全面解析:从原理到实践应用
  • 银河麒麟(Kylin) - V10 GFB高级服务器操作系统ARM64部署昇腾910b训练机以及Docker安装
  • AiPy+豆包:数据分析可视化,一键生成GUI工具
  • 复习笔记 39
  • 2025牛客暑期多校训练记录
  • 1688图片搜索逆向工程与多模态搜索融合实践——基于CLIP模型的特征向量检索优化
  • 4-Nodejs模块化
  • 倒计时熔断机制的出价逻辑
  • 入门华为人工智能,HCIA/HCIP/HCIE该怎么选?
  • 【kubernetes】--ConfigMap
  • slam中的eskf观测矩阵推导