You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从嵌套字典的列表中提取指定服务器的所有exp值?

问题:提取嵌套字典中指定服务器的用户exp值

给定如下嵌套字典结构:

{"0": {"server": 681262466650734596, "channel": 693639674841006101, "balance": 1000, "bal2": 30000, "regd": [{"user": 624748908479905812, "exp": 2015.0, "rank": 2, "points": 125.69999999999996, "msgs": 9999, "tokens": 10000}, {"user": 1096531392369807492, "exp": 501.0, "rank": 1, "points": 1.4000000000000004, "msgs": 1, "tokens": 10000}, {"user": 603657446233210908, "exp": 600, "rank": 2, "points": 169, "msgs": 0, "tokens": 12000}, {"user": 248793436293955584, "exp": 630, "rank": 2, "points": 169, "msgs": 0, "tokens": 12000}, {"user": 217098431393431553, "exp": 555, "rank": 2, "points": 169, "msgs": 0, "tokens": 12000}]}}

需要编写Python函数,接收服务器编号参数,找到匹配服务器的条目后,提取regd列表中所有元素的exp值,预期输出为[2015.0, 501.0, 600, 630, 555]。以下是对现有两个函数的问题排查及修复方案:


现有函数问题分析

函数1问题点:

def PBX(self, User: int, Server: int):
        dop = self.ReadLevel()
        for key, value_key in dop.items():
            if value_key['server'] == Server:
                nd = value_key['regd']
                for key, value in nd.items():  # 错误:regd是列表,不是字典,不能用items()
                    if 'exp' in key:  # 错误:key是列表索引,不是字典键,判断逻辑完全错误
                        res = []  # 错误:每次循环初始化列表,无法累积结果
                        res.append(value['exp'])
                        print(res)
                    return  # 错误:找到第一个元素就返回,无法收集所有exp值
  1. regd是列表类型,遍历应该直接取元素,而非用items()
  2. 判断'exp' in key逻辑错误,key是列表的索引(整数),不是用户字典的键
  3. 结果列表res在循环内初始化,每次循环都会清空之前的内容
  4. 提前return导致只处理第一个元素就退出,无法收集所有exp值

函数2问题点:

def PBX(self, User: int, Server: int):
        dop = self.ReadLevel()
        for key, value_key in dop.items():
            if value_key['server'] == Server:
                nd = value_key['regd']
                res = []
                for value_key in nd:
                    exp_value = value_key['exp']
                    if exp_value is not None:  # 错误:无法判断'exp'键是否存在,若键不存在会直接报错
                        res.append(exp_value)
                        return print(res)  # 错误:添加第一个元素就返回,只得到单个值
        return []
  1. 循环内添加第一个exp值后就return,导致只返回第一个结果,无法收集全部
  2. 用exp_value is not None无法处理exp键不存在的情况,会直接抛出KeyError

修复后的函数

def PBX(self, User: int, Server: int):
        dop = self.ReadLevel()
        for entry in dop.values():
            if entry['server'] == Server:
                # 遍历regd列表,提取每个用户的exp值,处理键不存在的情况
                return [user.get('exp') for user in entry['regd'] if user.get('exp') is not None]
        # 未找到匹配服务器时返回空列表
        return []

修复说明:

  • 直接遍历字典的值(dop.values()),无需关注外层键
  • 使用列表推导式简洁收集所有exp值,同时用get('exp')避免键不存在的报错
  • 遍历完所有用户条目后再返回结果,确保收集全部exp值
  • 若服务器未匹配,返回空列表

测试验证:

传入服务器编号681262466650734596,函数将返回预期结果:

[2015.0, 501.0, 600, 630, 555]

内容的提问来源于stack exchange,提问作者Roy Eastman-Kodak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 16:03:20