如何从文件生成字典并为同一键添加多个值?
问题解答
当前代码无法实现需求,原因如下:
- 现有代码里字典的每个键仅存储单个分数值,当同一姓名多次出现时,新分数会直接覆盖旧值,比如
vryzhikov最终只会保留最后一次的53,没法保留所有分数。 - 代码的输出逻辑也不符合预期,只是打印字典结构和输入姓名对应的单个值,没有按要求的格式输出所有分数。
修正后的代码
要实现需求,需要把字典的值设为列表来存储多个分数,最后按指定格式输出:
d = {} with open("students.txt") as f: for line in f: parts = line.strip().split() name = parts[1] score = parts[2] # 姓名不在字典里就初始化空列表,存在就追加分数 if name not in d: d[name] = [] d[name].append(score) # 按预期格式输出所有记录 for name, scores in d.items(): # 对分数按数值排序,匹配预期输出的顺序 sorted_scores = sorted(scores, key=int) print(f"{name} {' '.join(sorted_scores)}") # 保留姓名查询功能 A = input("输入姓名查询分数:") if A in d: print(f"{A} {' '.join(sorted(d[A], key=int))}") else: print(f"{A} 无对应分数记录")
代码说明
- 用列表存储每个姓名的所有分数,彻底避免覆盖问题。
- 对分数按数值排序,匹配预期输出中
vryzhikov的分数顺序。 - 最终输出格式完全符合要求,同时保留了姓名查询的功能。
内容的提问来源于stack exchange,提问作者TreeFellOnMe
相关产品推荐
相关产品推荐

