如何在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
相关产品推荐
相关产品推荐

