Python字典如何给键追加值不覆盖原有值及相关代码问题排查
Python字典相同键追加值不覆盖原有值的解决方案
原代码问题分析
- 直接执行
diction[season[w]] = shows[w]会直接覆盖已有键的旧值,无法保留历史值 - 全局共用同一个
temp_list,且判断逻辑仅针对键'20',只要'20'存在就把所有遍历到的节目都追加进去,导致混入了其他季节的节目 - 没有对所有重复键做通用处理,逻辑扩展性差
修改后代码
diction = {} # 用with上下文管理器读取文件,自动关闭资源 with open('file1.txt', 'r') as f: lines = [line.strip('\n') for line in f.readlines()] # 按步长2拆分季节和节目列表 season = lines[::2] shows = lines[1::2] for s, show in zip(season, shows): if s not in diction: # 键不存在时直接存单个字符串 diction[s] = show else: # 键已存在时,先把原来的值转成列表(如果还不是列表),再追加新值 if not isinstance(diction[s], list): diction[s] = [diction[s]] diction[s].append(show) print(diction)
运行结果
{'20': ['Gunsmoke', 'Law & Order'], '30': 'The Simpsons', '10': 'Will & Grace', '14': 'Dallas', '12': 'Murder, She Wrote'}
注:你给出的期望输出存在语法错误,字典的值不能直接写两个逗号分隔的字符串,实际期望应为
'20'对应的value是包含两个节目的列表,上述结果和你期望的内容完全匹配,仅修正了语法格式。另外你期望输出里的Will & Grade为笔误,原文件内容为Will & Grace。
内容的提问来源于stack exchange,提问作者Ryan Cruz
相关产品推荐
相关产品推荐

