Python字典Username条目查找函数TypeError报错问题求助
修复TypeError:string indices must be integers问题
问题根源
你猜的完全没错!这个错误的核心就是reviewers_dicts的结构和你的代码逻辑不匹配。你的代码默认要遍历多个用户条目,但实际reviewers_dicts是单个用户的属性字典——它的键是'Username'、'DOB'这类属性名,对应的值都是字符串或列表。当你用for k, entry in reviewers_dicts.items()循环时,entry拿到的是像'yuoc2324'这样的字符串,自然不能用entry['Username']来索引(字符串只能用整数下标,比如entry[0])。
修复方案
根据你要查找指定用户名对应完整条目的需求,我们分两种场景来修复:
场景1:需要存储多个用户信息
首先调整reviewers_dicts为字典嵌套字典的结构,外层用唯一标识(比如用户ID或用户名)作为键,内层是每个用户的完整属性:
# 示例:可存储多个用户的结构 reviewers_dicts = { 'u001': {'Username': 'yuoc2324', 'DOB': '02.08.1975', 'State': 'South Dakota', 'Reviewed': []}, 'u002': {'Username': 'KKYSD', 'DOB': '10.15.1988', 'State': 'Texas', 'Reviewed': ['MovieA', 'MovieB']} }
然后修改函数,遍历每个用户的属性字典进行匹配:
def find_user(): value = input('Input Username: ') # 遍历所有用户的属性字典 for entry in reviewers_dicts.values(): if value == entry['Username']: return entry # 返回匹配到的完整用户条目 # 未找到时返回提示 return f"Username '{value}' not found" print(find_user())
场景2:只需要处理单个用户
如果你的场景里只有一个用户,完全不需要循环,直接判断即可:
reviewers_dicts = {'Username': 'yuoc2324', 'DOB': '02.08.1975', 'State': 'South Dakota', 'Reviewed': []} def find_user(): value = input('Input Username: ') if value == reviewers_dicts['Username']: return reviewers_dicts return f"Username '{value}' not found" print(find_user())
测试验证
用第一个方案输入KKYSD,会返回对应的完整用户条目;输入不存在的用户名则返回提示信息,不会再触发TypeError。
内容的提问来源于stack exchange,提问作者shogga22
相关产品推荐
相关产品推荐

