核心概念
明确一点:Python 中的字典(Dictionary)是一种内置的数据类型,用于存储键值对,你不需要像导入模块(如 import math)那样“导入”一个字典,而是创建或加载一个字典对象。

下面是几种最常见的导入(创建/加载)字典的方法。
直接在代码中创建(最常用)
这是最直接、最基础的方式,适用于硬编码的、小型的字典数据。
使用花括号
这是最常见、最简洁的创建方式。
# 创建一个空的字典
empty_dict = {}
print(f"空字典: {empty_dict}")
# 创建一个包含键值对的字典
student = {
"name": "Alice",
"age": 25,
"courses": ["Math", "History"]
}
print(f"学生信息: {student}")
# 访问字典中的值
print(f"学生姓名: {student['name']}")
使用 dict() 构造函数
这种方式在需要动态创建字典时非常有用,或者从其他可迭代对象(如元组列表)创建字典。

# 从关键字参数创建
person = dict(name="Bob", age=30, city="New York")
print(f"从关键字参数创建: {person}")
# 从包含键值对元组的列表创建
pairs = [("key1", "value1"), ("key2", "value2")]
another_dict = dict(pairs)
print(f"从元组列表创建: {another_dict}")
从 JSON 文件导入
当你的字典数据结构比较复杂,或者需要与外部应用程序(如 Web API)交互时,通常会将数据存储在 JSON 文件中,JSON(JavaScript Object Notation)的格式与 Python 字典非常相似。
假设你有一个名为 data.json 的文件,内容如下:
data.json
{
"name": "Charlie",
"age": 35,
"is_student": false,
"address": {
"street": "123 Main St",
"city": "Boston"
},
"hobbies": ["Reading", "Gaming"]
}
你可以使用 Python 内置的 json 模块来读取这个文件并将其转换为 Python 字典。

import json
try:
# 使用 'with' 语句可以确保文件被正确关闭
with open('data.json', 'r', encoding='utf-8') as f:
# json.load() 从文件对象中读取 JSON 数据并转换为 Python 字典
data_from_json = json.load(f)
# 现在你可以像使用普通字典一样使用 data_from_json
print(f"从 JSON 文件导入的数据: {data_from_json}")
print(f"姓名: {data_from_json['name']}")
print(f"城市: {data_from_json['address']['city']}")
except FileNotFoundError:
print("错误: 文件 'data.json' 未找到。")
except json.JSONDecodeError:
print("错误: 文件 'data.json' 不是有效的 JSON 格式。")
从 CSV 文件导入
CSV(Comma-Separated Values)是一种常见的表格数据格式,你可以使用 Python 内置的 csv 模块来读取 CSV 文件,并将其转换为字典列表。
假设你有一个名为 users.csv 的文件,内容如下:
users.csv
name,age,city David,28,Los Angeles Eva,22,Chicago
下面的代码会将 CSV 文件的每一行转换为一个字典,键是 CSV 的第一行(列名)。
import csv
# 方法 A: 使用 csv.DictReader (推荐)
# 它会自动使用第一行作为字典的键
with open('users.csv', 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
users_list = list(reader) # 将 DictReader 对象转换为列表
print(f"使用 DictReader 导入的结果: {users_list}")
print(f"第一个用户: {users_list[0]}")
print(f"第一个用户的年龄: {users_list[0]['age']}")
# 方法 B: 手动处理 (更灵活但代码稍多)
with open('users.csv', 'r', encoding='utf-8') as f:
lines = f.readlines()
# 获取表头作为键
headers = [line.strip() for line in lines[0].split(',')]
users_manual_list = []
# 遍历数据行
for line in lines[1:]:
values = line.strip().split(',')
# 使用 zip 和 dict 将键和值配对
user_dict = dict(zip(headers, values))
users_manual_list.append(user_dict)
print(f"\n手动处理导入的结果: {users_manual_list}")
从文本文件导入
如果文本文件中的格式非常简单,例如每行都是 key:value,你可以手动解析它。
假设你有一个名为 config.txt 的文件:
config.txt
host:localhost
port:8080
user:admin
config_dict = {}
with open('config.txt', 'r', encoding='utf-8') as f:
for line in f:
# 去除行首尾的空白字符
line = line.strip()
if ':' in line:
key, value = line.split(':', 1) # 只分割第一个冒号
config_dict[key.strip()] = value.strip()
print(f"从文本文件导入的配置: {config_dict}")
print(f"主机地址: {config_dict['host']}")
从数据库导入
这是企业级应用中非常常见的需求,你需要使用数据库连接库(如 psycopg2 用于 PostgreSQL,pymysql 用于 MySQL)来查询数据库,然后将结果转换为字典。
这里以 SQLite(Python 内置)为例:
import sqlite3
# 假设我们有一个 SQLite 数据库和一个 'products' 表
# id, name, price
# 1, 'Laptop', 999.99
# 2, 'Mouse', 25.50
# 连接到数据库 (如果不存在,它会创建一个)
conn = sqlite3.connect(':memory:') # 使用内存数据库作为示例
cursor = conn.cursor()
# 创建一个表并插入一些数据
cursor.execute('''
CREATE TABLE products (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
price REAL
)
''')
cursor.execute("INSERT INTO products (name, price) VALUES (?, ?)", ('Laptop', 999.99))
cursor.execute("INSERT INTO products (name, price) VALUES (?, ?)", ('Mouse', 25.50))
conn.commit()
# 查询数据并转换为字典列表
cursor.execute("SELECT id, name, price FROM products")
# 使用 row_factory 将每一行结果转换为字典
conn.row_factory = sqlite3.Row
rows = cursor.fetchall()
products_list = [dict(row) for row in rows]
# 关闭连接
conn.close()
print(f"从数据库导入的产品列表: {products_list}")
print(f"第一个产品: {products_list[0]}")
总结与对比
| 方法 | 适用场景 | 优点 | 缺点 | 所需库 |
|---|---|---|---|---|
| 直接创建 | 硬编码、小型、静态数据 | 简单、快速、直观 | 不适合大型或动态数据 | 无 |
| JSON 文件 | 配置文件、API 数据、跨语言数据交换 | 结构清晰、易于人阅读、语言无关 | 需要文件 I/O 操作 | json (内置) |
| CSV 文件 | 表格数据、电子表格数据 | 标准格式、易于处理表格 | 不适合嵌套或复杂结构 | csv (内置) |
| 文本文件 | 简单的键值对配置 | 解析逻辑简单、格式自由 | 容易出错,不适合复杂数据 | 无 |
| 数据库 | 大量结构化数据、持久化存储 | 功能强大、可查询、可扩展 | 需要数据库知识、依赖外部服务 | sqlite3, psycopg2, pymysql 等 |
选择哪种方法取决于你的具体需求,对于初学者和大多数脚本任务,直接创建和从 JSON 文件导入是最常用和最重要的。
