You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python 3中从文件创建指定格式的字典?

Python文件读取与字典构造解决方案

问题背景

给定函数定义:

def get_data(file: TextIO) -> dict[tuple[str, int], list[list[float]]]:
    pass

文件内容格式如下:

Tom Brady
45678
Chequing Account
Balance: 456
Interest rate per annum: 0.32
Savings Account 1
Balance: 4050
Interest rate per annum: 5.6

需要生成的目标字典结构:

{("Tom Brady", 45678): [[456.0, 4050.0], [0.32, 5.6]]}

你尝试的代码存在两个核心问题:

  • 硬编码读取行数,无法适配账户数量不固定的情况
  • 未从文本行中提取出余额和利率的数值,且return语句会直接终止循环,无法读取完整文件

解决思路与代码实现

步骤1:读取用户基础信息

先读取文件前两行,分别作为姓名和用户编号(注意把编号转成int类型)。

步骤2:循环读取所有账户信息

从第三行开始,循环读取账户名称、余额行、利率行,直到文件读取完毕。每次读取后提取余额和利率的数值,分别存入对应的列表。

步骤3:构造目标字典

将用户信息作为键,余额列表和利率列表组成的嵌套列表作为值,存入字典。

完整代码如下:

from typing import TextIO

def get_data(file: TextIO) -> dict[tuple[str, int], list[list[float]]]:
    # 读取姓名和用户编号
    name = file.readline().strip()
    if not name:
        return {}  # 处理空文件情况
    user_num = int(file.readline().strip())
    
    balances = []
    rates = []
    
    # 循环读取所有账户信息
    while True:
        # 读取账户名称行,若为空则结束循环
        account_name = file.readline().strip()
        if not account_name:
            break
        
        # 读取余额行并提取数值
        balance_line = file.readline().strip()
        balance = float(balance_line.split(': ')[1])
        balances.append(balance)
        
        # 读取利率行并提取数值
        rate_line = file.readline().strip()
        rate = float(rate_line.split(': ')[1])
        rates.append(rate)
    
    # 构造目标字典
    return {(name, user_num): [balances, rates]}

代码说明

  • 使用while True循环配合break条件,适配任意数量的账户
  • 通过split(': ')分割文本行,直接提取冒号后的数值部分,再转为float类型
  • 增加了空文件的边界处理,避免报错
  • 最终返回的字典结构完全符合需求

内容的提问来源于stack exchange,提问作者Sarah Ahmadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 18:57:09