首页 > 编程语言 >8.python字典

8.python字典

时间:2024-12-17 16:02:10浏览次数:6  
标签:python dict key print 键值 tinydict 字典

文章目录

Python 字典 (Dictionary) 深度总结

字典是 Python 中一种非常灵活且强大的数据结构,它允许你存储键值对(key-value pairs),并且可以快速地根据键查找对应的值。字典是可变的(mutable),意味着你可以在创建后修改、添加或删除其中的键值对。

1. 字典的基本概念
  • 键值对:字典中的每个元素都是一个键值对,格式为 key: value,键和值之间用冒号 : 分隔。
  • 键的唯一性:字典中的键必须是唯一的,如果重复了,后面的键值对会覆盖前面的同名键。
  • 值的多样性:字典中的值可以是任意类型的 Python 对象,包括数字、字符串、列表、元组、其他字典等。
  • 键的不可变性:字典的键必须是不可变类型,如字符串、数字或元组(但元组内部不能包含可变对象)。列表和其他可变类型不能作为键。
# 创建字典
tinydict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}

# 键值对的格式
d = {key1: value1, key2: value2}
2. 访问字典中的值
  • 通过键访问:使用方括号 [] 和键来访问字典中的值。如果键不存在,会抛出 KeyError 异常。
  • 使用 get() 方法get() 方法允许你安全地访问字典中的值,并且可以指定默认值,避免抛出异常。
# 通过键访问
print(tinydict['Name'])  # 输出: Zara

# 使用 get() 方法
print(tinydict.get('Name'))  # 输出: Zara
print(tinydict.get('Alice', 'Not Found'))  # 输出: Not Found
3. 修改字典
  • 更新现有键值对:直接通过键赋值来更新字典中已有的键值对。
  • 添加新键值对:通过键赋值来添加新的键值对。
  • 删除键值对
    • del 语句:删除指定的键值对。
    • pop() 方法:删除并返回指定键的值。
    • popitem() 方法:随机删除并返回一个键值对(Python 3.7 及以上版本按插入顺序删除最后一个键值对)。
    • clear() 方法:清空整个字典。
# 更新和添加键值对
tinydict['Age'] = 8  # 更新
tinydict['School'] = "RUNOOB"  # 添加

print(tinydict)  # 输出: {'Name': 'Zara', 'Age': 8, 'Class': 'First', 'School': 'RUNOOB'}

# 删除键值对
del tinydict['Name']
print(tinydict)  # 输出: {'Age': 8, 'Class': 'First', 'School': 'RUNOOB'}

popped_value = tinydict.pop('Class')
print(popped_value)  # 输出: First
print(tinydict)  # 输出: {'Age': 8, 'School': 'RUNOOB'}

popped_item = tinydict.popitem()
print(popped_item)  # 输出: ('School', 'RUNOOB')
print(tinydict)  # 输出: {'Age': 8}

tinydict.clear()
print(tinydict)  # 输出: {}
4. 遍历字典
  • 遍历键:使用 keys() 方法或直接遍历字典。
  • 遍历值:使用 values() 方法。
  • 遍历键值对:使用 items() 方法。
# 遍历键
for key in tinydict:
    print(key)

# 或者使用 keys() 方法
for key in tinydict.keys():
    print(key)

# 遍历值
for value in tinydict.values():
    print(value)

# 遍历键值对
for key, value in tinydict.items():
    print(f"{key}: {value}")
5. 字典的内置函数和方法
函数/方法描述
len(dict)返回字典中键值对的数量。
str(dict)返回字典的可打印字符串表示。
type(variable)返回变量的类型,如果是字典则返回 dict 类型。
dict.clear()删除字典中的所有键值对。
dict.copy()返回字典的一个浅拷贝。
dict.fromkeys(seq[, value])创建一个新的字典,以序列 seq 中的元素作为键,value 为所有键的初始值(默认为 None)。
dict.get(key, default=None)返回指定键的值,如果键不存在则返回 default(默认为 None)。
dict.items()返回一个包含所有键值对的视图对象(可迭代的 (key, value) 元组)。
dict.keys()返回一个包含所有键的视图对象(可迭代)。
dict.values()返回一个包含所有值的视图对象(可迭代)。
dict.setdefault(key, default=None)如果键存在则返回其值,否则插入该键并将值设为 default(默认为 None)。
dict.update(other_dict)other_dict 中的键值对更新到当前字典中。如果有相同的键,则覆盖原来的值。
dict.pop(key[, default])删除并返回指定键的值,如果键不存在则返回 default(默认抛出 KeyError)。
dict.popitem()随机删除并返回一个键值对(Python 3.7 及以上版本按插入顺序删除最后一个键值对)。
6. 字典的高级用法
6.1 字典推导式 (Dictionary Comprehensions)

字典推导式是一种简洁的方式来创建字典。它允许你在一行代码中生成复杂的字典。

# 基本字典推导式
squares = {x: x**2 for x in range(6)}
print(squares)  # 输出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

# 带条件的字典推导式
even_squares = {x: x**2 for x in range(6) if x % 2 == 0}
print(even_squares)  # 输出: {0: 0, 2: 4, 4: 16}

# 嵌套字典推导式
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

flattened = {f"row{i}_col{j}": matrix[i][j] for i in range(len(matrix)) for j in range(len(matrix[i]))}
print(flattened)
# 输出: {'row0_col0': 1, 'row0_col1': 2, 'row0_col2': 3, 'row1_col0': 4, 'row1_col1': 5, 'row1_col2': 6, 'row2_col0': 7, 'row2_col1': 8, 'row2_col2': 9}
6.2 字典的浅拷贝与深拷贝
  • 浅拷贝:只复制字典的第一层键值对,对于嵌套的字典,内部的字典仍然是引用。
  • 深拷贝:递归地复制整个字典及其嵌套的子字典。
import copy

# 浅拷贝
original = {'a': 1, 'b': {'c': 2}}
shallow_copy = original.copy()

original['b']['c'] = 3
print(original)          # 输出: {'a': 1, 'b': {'c': 3}}
print(shallow_copy)      # 输出: {'a': 1, 'b': {'c': 3}}

# 深拷贝
deep_copy = copy.deepcopy(original)
original['b']['c'] = 4
print(original)          # 输出: {'a': 1, 'b': {'c': 4}}
print(deep_copy)         # 输出: {'a': 1, 'b': {'c': 3}}
6.3 字典的合并

在 Python 3.9 及以上版本中,你可以使用 | 运算符来合并两个字典。对于重复的键,后面的字典中的值会覆盖前面的字典中的值。

dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}

merged_dict = dict1 | dict2
print(merged_dict)  # 输出: {'a': 1, 'b': 3, 'c': 4}

# 也可以使用 update() 方法
dict1.update(dict2)
print(dict1)  # 输出: {'a': 1, 'b': 3, 'c': 4}
6.4 字典的默认值

collections.defaultdictcollections 模块中的一个类,它允许你为字典的键设置默认值。当你访问一个不存在的键时,defaultdict 会自动创建该键,并赋予默认值。

from collections import defaultdict

# 创建一个 defaultdict,键的默认值为 0
counts = defaultdict(int)

words = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
for word in words:
    counts[word] += 1

print(counts)  # 输出: defaultdict(<class 'int'>, {'apple': 3, 'banana': 2, 'orange': 1})
6.5 字典的排序

你可以使用 sorted() 函数结合 lambda 表达式来对字典进行排序。你可以根据键或值进行排序。

# 根据键排序
d = {'apple': 3, 'banana': 2, 'orange': 1}
sorted_by_key = dict(sorted(d.items()))
print(sorted_by_key)  # 输出: {'apple': 3, 'banana': 2, 'orange': 1}

# 根据值排序
sorted_by_value = dict(sorted(d.items(), key=lambda item: item[1]))
print(sorted_by_value)  # 输出: {'orange': 1, 'banana': 2, 'apple': 3}
7. 字典的常见应用场景
  • 配置文件:字典非常适合用于存储配置信息,键可以是配置项的名称,值可以是配置项的值。
  • 映射关系:字典可以用于存储映射关系,例如用户 ID 到用户名的映射、国家代码到国家名称的映射等。
  • 缓存:字典可以用作简单的缓存,将计算结果存储在字典中,以便后续快速访问。
  • 计数器collections.Counter 是基于字典的计数器类,适合用于统计元素出现的次数。
from collections import Counter

words = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
counter = Counter(words)
print(counter)  # 输出: Counter({'apple': 3, 'banana': 2, 'orange': 1})
8. 字典的性能优化
  • 使用 dict.setdefault():如果你需要频繁检查字典中是否存在某个键并设置默认值,使用 setdefault() 可以简化代码并提高效率。
  • 使用 collections.defaultdict:对于需要频繁处理缺失键的情况,defaultdict 可以避免每次都检查键是否存在,从而提高性能。
  • 避免频繁的 dict.copy():如果你只需要部分复制字典,考虑使用字典推导式或 dict.update() 来构建新的字典,而不是使用 copy()
9. 字典的国际化和本地化

虽然字典本身没有直接涉及国际化和本地化的功能,但在处理多语言数据时,你可以结合 gettext 模块来实现字典内容的翻译。

import gettext

# 加载翻译文件
translator = gettext.translation('messages', localedir='locales', languages=['fr'])
_ = translator.gettext

translations = {'apple': 'pomme', 'banana': 'banane', 'orange': 'orange'}

translated_dict = {k: _(v) for k, v in translations.items()}
print(translated_dict)  # 输出: {'apple': 'pomme', 'banana': 'banane', 'orange': 'orange'}

总结

通过上述详细的解释,我们全面介绍了 Python 字典的基本概念、访问方式、修改操作、内置函数和方法、高级用法以及性能优化技巧。字典是 Python 中非常强大且灵活的数据结构,掌握这些知识可以帮助你在编写代码时更加高效地处理和操作数据。

如果你有任何具体问题或需要进一步的解释,请随时告诉我!

标签:python,dict,key,print,键值,tinydict,字典
From: https://blog.csdn.net/qq_55125921/article/details/144495158

相关文章

  • 【华为OD-E卷-寻找链表的中间结点 100分(python、java、c++、js、c)】
    【华为OD-E卷-寻找链表的中间结点100分(python、java、c++、js、c)】题目给定一个单链表L,请编写程序输出L中间结点保存的数据。如果有两个中间结点,则输出第二个中间结点保存的数据。例如:给定L为1→7→5,则输出应该为7;给定L为1→2→3→4,则输出应该为3;输入描述......
  • 【华为OD-E卷-字符串重新排序 字符串重新排列 100分(python、java、c++、js、c)】
    【华为OD-E卷-字符串重新排序字符串重新排列100分(python、java、c++、js、c)】题目给定一个字符串s,s包括以空格分隔的若干个单词,请对s进行如下处理后输出:1、单词内部调整:对每个单词字母重新按字典序排序2、单词间顺序调整:1)统计每个单词出现的次数,并按次数降序排列2)次......
  • 基于yolov10的舌象检测识别系统,支持图像、视频和摄像实时检测【pytorch框架、python源
     更多目标检测,目标追踪、图像分类识别等项目可看我主页其他文章功能演示:yolov10,舌象检测识别系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】_哔哩哔哩_bilibili(一)简介基于yolov10的舌象检测识别系统是在pytorch框架下实现的,这是一个完整的项目,包括代码,数据......
  • centos8 升级 python3.10
    想要将Python3版本从已有的3.6.8升级到3.10,直接dnf安装发现找不到安装包,只能从源代码手动安装,以下是详细步骤:1.安装必要的依赖编译Python3.10需要一些开发工具和库:sudodnfgroupinstall"DevelopmentTools"-ysudodnfinstall-ygccopenssl-develbzip2-devellibffi......
  • YOLO 数据增强 Python 脚本(可选次数,无限随机增强)- 一键执行搞定,自动化提升训练集质量
    前言往往在准备需要训练一个模型的时候,很多人苦于找不到合适的数据集,自己标注又耗时耗力,而数据增强正好解决了这个问题,因此对于数据增强这个概念是非常有必要的,本文将提供一个数据增强脚本,你无需理解代码,只需懂得如何使用即可达到你要的效果。背景近期我在一直寻找冲沟相关......
  • python基于语音识别的智能垃圾分类系统
    大家好我是蓝天,混迹在java圈的辛苦码农。今天要和大家聊的是一款《python基于语音识别的智能垃圾分类系统》毕业设计项目。项目源码以及部署相关请联系蓝天,文末附上联系信息。......
  • python实战(十一)——情感分析
    一、概念    情感分析(SentimentAnalysis),也称为意见挖掘(OpinionMining),是自然语言处理(NLP)领域中的一个重要任务,广泛应用于舆情监控、市场调研、客户反馈分析等领域。它的目标是通过分析文本数据来识别和提取其中的情感信息。二、基于规则的情感分析        ......
  • python往windows系统的txt文件读取内容和写入内容
    继上一节windows系统打开命令行窗口,这一节开始讲述windows系统下读取txt文件内容和写入txt文件内容一、读取文件里面的内容:1、在python安装路径下创建一个文件pyfileio.txt文件,如下图所示,记录好pyfileio.txt文件的绝对路径C:\Users\Administrator\AppData\Local\Program......
  • Gitee三方登录_Python (超详细)
    第三方登录是一种常见的身份验证机制,允许用户使用他们在其他平台(如社交媒体、电子邮件服务或开发平台)的账号来登录你的应用或网站,而不需要创建新的用户名和密码。这种方式不仅简化了用户的登录过程,还提高了用户体验和安全性。第三方登录的主要特点简化注册和登录:用户无需创建新......
  • Python 闭包:常见用例和示例
     在Python中,闭包通常是定义在另一个函数内部的函数。这个内部函数抓取在其作用域外定义的对象,并将它们与内部函数对象本身关联起来。由此产生的组合称为闭包。 闭包是函数式编程语言的一个常见特性。在Python中,闭包非常有用,因为它支持创建基于函数的装饰器,而装饰器是一种......