Dictionary(字典)
特点
键(Key)的特性
字典中的键必须是唯一且不可变的类型,例如字符串、数字或元组。列表或其他字典不能作为键使用。
值(Value)的特性
字典中的值没有特殊要求,可以是任何类型的数据,包括其他容器类型,如列表、元组或字典。
无序性
字典是无序的,元素没有固定的位置,这与列表和元组不同。
定义
我通常使用大括号 {}
来定义字典,其中包含以逗号分隔的键值对。
my_dict = {
"name": "Alice",
"age": 25,
"is_student": False
}
使用场景
数据表示
我经常用字典来表示一个实体的信息。
student_info = {
"name": "sumingcheng",
"age": 20,
"major": "Computer Science",
"enrollment_year": 2022
}
缓存和记忆化
使用字典实现斐波那契数列的记忆化,以提高计算效率。
def fibonacci(n, memo={}):
if n in memo:
return memo[n]
if n <= 1:
return n
result = fibonacci(n - 1, memo) + fibonacci(n - 2, memo)
memo[n] = result
return result
查找和映射
创建一个电话簿,将名字映射到电话号码。
phone_book = {
"Alice": "123-456-7890",
"Bob": "987-654-3210",
"Charlie": "555-777-9999"
}
print(phone_book["Alice"]) # 输出:123-456-7890
数据分组
根据商品的类别对它们进行分类。
products = [
{"name": "apple", "category": "fruit"},
{"name": "broccoli", "category": "vegetable"},
{"name": "banana", "category": "fruit"},
]
grouped_products = {}
for product in products:
category = product["category"]
name = product["name"]
if category not in grouped_products:
grouped_products[category] = []
grouped_products[category].append(name)
print(grouped_products) # 输出:{'fruit': ['apple', 'banana'], 'vegetable': ['broccoli']}
配置和设置
保存应用程序的配置选项和设置。
app_config = {
"theme": "dark",
"notifications": True,
"language": "en-US",
"version": "1.2.5"
}
bytes 类型
bytes
是 Python 中的一个内置数据类型,用于表示不可变的字节序列。我通常在处理原始二进制数据、固定长度的字节以及字节流(如文件和网络传输)时使用它。
特点
不可变性
与字符串 (str
) 类似,bytes
对象是不可变的,这意味着无法修改其中的内容。如果需要可修改的字节序列,可以使用 bytearray
。
字节表示
bytes
对象由一系列字节组成,每个字节的取值范围是 0 到 255。
如何创建 bytes
使用前缀 b
创建字节字符串
byte_str = b'hello'
使用 bytes()
构造函数
byte_array1 = bytes([65, 66, 67]) # 输出:b'ABC'
byte_array2 = bytes("你好", encoding="utf-8")
使用场景
处理二进制文件
在读取或写入二进制文件(如图片、音频或视频文件)时,我会使用 bytes
类型。
with open('image.jpg', 'rb') as file: # 使用 'rb' 模式表示二进制读取
data = file.read()
print(type(data)) # 输出:<class 'bytes'>
网络通信
在网络通信中,数据通常以字节流的形式传输。使用 bytes
可以确保发送或接收的是原始的二进制数据。
与其他语言的接口
当调用 C 库或其他语言的函数时,这些函数可能需要二进制数据作为参数或返回值,此时我会使用 bytes
。
加密和哈希
许多加密和哈希算法使用 bytes
来表示原始数据和加密或哈希后的输出。