嵌套字典匹配服务器与用户后返回对应数据的函数问题
问题分析与修复方案
原函数的核心问题
- 参数类型标注错误:用户/服务器编号是整数类型,但函数里标注为
bool,虽不一定直接导致匹配失败,但不符合数据逻辑。 - 返回语句失效:找到匹配用户后写的
return #FS是无效代码,相当于直接返回None,根本没返回目标用户字典。 - 冗余代码拖累效率:
g、ch、b1、b2这些列表推导完全没必要——外层循环已经找到匹配的服务器,直接用value_key里的字段即可,无需再遍历整个字典。 - 无明确异常分支:遍历完用户列表没找到匹配项时,函数会默认返回
None,没有任何调试提示。
修复后的函数
def StatsBlyatX(self, User: int, Server: int): gop = self.ReadLevel() # 遍历所有服务器数据 for server_data in gop.values(): if server_data['server'] == Server: # 在目标服务器的用户列表中查找匹配项 for user_entry in server_data['regd']: if user_entry['user'] == User: print("stats got") # 直接返回匹配到的用户字典 return user_entry # 服务器存在但用户未找到 print("该用户未在目标服务器注册") return None # 目标服务器不存在 print("未找到目标服务器") return None
关键优化点
- 修正参数类型为
int,与输入数据的实际类型匹配。 - 直接返回找到的
user_entry(即需求中的用户字典),完全贴合功能目标。 - 移除冗余的列表推导,简化逻辑并提升代码效率。
- 增加服务器不存在、用户未找到的明确提示,方便调试定位问题。
- 用
gop.values()直接遍历服务器数据,无需处理字典键,代码更简洁。
测试验证
用你提供的字典数据测试:
- 传入
User=624748908479905812和Server=681262466650734596,函数会返回:{"user": 624748908479905812, "exp": 10, "rank": 1, "points": 1, "msgs": 1, "tokens": 10000} - 若传入不存在的用户或服务器,会返回
None并打印对应提示。
内容的提问来源于stack exchange,提问作者Roy Eastman-Kodak
相关产品推荐
相关产品推荐

