杰瑞科技汇

Python如何导入dictionary?

核心概念

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

Python如何导入dictionary?-图1
(图片来源网络,侵删)

下面是几种最常见的导入(创建/加载)字典的方法。


直接在代码中创建(最常用)

这是最直接、最基础的方式,适用于硬编码的、小型的字典数据。

使用花括号

这是最常见、最简洁的创建方式。

# 创建一个空的字典
empty_dict = {}
print(f"空字典: {empty_dict}")
# 创建一个包含键值对的字典
student = {
    "name": "Alice",
    "age": 25,
    "courses": ["Math", "History"]
}
print(f"学生信息: {student}")
# 访问字典中的值
print(f"学生姓名: {student['name']}") 

使用 dict() 构造函数

这种方式在需要动态创建字典时非常有用,或者从其他可迭代对象(如元组列表)创建字典。

Python如何导入dictionary?-图2
(图片来源网络,侵删)
# 从关键字参数创建
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 字典。

Python如何导入dictionary?-图3
(图片来源网络,侵删)
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 文件导入是最常用和最重要的。

分享:
扫描分享到社交APP
上一篇
下一篇