python - 在 Python 中有效地解析 JSON 输出?

标签 python python-3.x python-requests steam steam-web-api

下面的代码块有效,但是由于我对使用 JSON 的理解有限,我不满意它是非常优化的,但我似乎无法找到更有效的方法。

steam_game_db是这样的:

{
    "applist": {
        "apps": [
            {
                "appid": 5,
                "name": "Dedicated Server"
            },
            {
                "appid": 7,
                "name": "Steam Client"
            },
            {
                "appid": 8,
                "name": "winui2"
            },
            {
                "appid": 10,
                "name": "Counter-Strike"
            }
        ]
    }
}

到目前为止我的 Python 代码是
i = 0
x = 570

req_name_from_id = requests.get(steam_game_db)
j = req_name_from_id.json()

while j["applist"]["apps"][i]["appid"] != x:
    i+=1
returned_game = j["applist"]["apps"][i]["name"]
print(returned_game)

除了遍历整个应用程序列表之外,还有更智能的方法来搜索它吗?理想情况下,数据结构中带有“appid”和“name”的元素的编号与其对应的“appid”相同

IE。
列表中的appid 570是Dota2
然而,appid 5069 和 Red Faction 中数据结构中的元素 570

还有这是什么类型的数据结构?也许它已经限制了我对这个答案的搜索能力。 (即每个元素对我来说似乎都是“appid”和“元素”的字典?)

编辑:按照建议更改为 for 循环
# returned_id string for appid from another query

req_name_from_id = requests.get(steam_game_db)
j_2 = req_name_from_id.json()

for app in j_2["applist"]["apps"]:
    if app["appid"] == int(returned_id):
        returned_game = app["name"]

print(returned_game)

最佳答案

通过键(如此处的应用程序 ID)访问事物的最方便的方法是使用字典。

您预先支付一些额外的性能成本来填充字典,但之后按 ID 提取值基本上是免费的。

然而,这是一个权衡。如果您只想在 Python 程序的生命周期内进行一次查找,那么与您已经做过的简单循环相比,支付额外的性能成本来构建字典将无益。但是,如果您想进行多次查找,那将是有益的。

# build dictionary
app_by_id = {}
for app in j["applist"]["apps"]:
  app_by_id[app["appid"]] = app["name"]

# use it
print(app_by_id["570"])

还要考虑在磁盘上缓存 JSON 文件。这将在您的程序启动期间节省时间。

关于python - 在 Python 中有效地解析 JSON 输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48354491/

相关文章:

python - 在 Python 中递归地转换字典

python - 如何重启 PyQt5 应用程序

python - 如何使用 python scapy 创建示例 IPSec 数据包

python - turtle 随机运动,从墙上弹起

Python 通过请求登录 chess.com

python - 如何从 python 发布到 hipchat

python - Keras 中的有状态 LSTM 中一批样本之间的状态是否保留?

python - 如何更改 Pyramid 中内部服务器错误的默认 View ?

python - 将 pandas groupby 值转换为 numpy 数组

python - ERROR : Could not build wheels for preshed, Thinc,blis,这是安装基于 pyproject.toml 的项目所必需的