跳到主要内容

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 来表示原始数据和加密或哈希后的输出。