为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用嵌套在另一个“for”循环中的“for”循环继续迭代 JSON 对象/列表?

如何使用嵌套在另一个“for”循环中的“for”循环继续迭代 JSON 对象/列表?

守着星空守着你 2022-05-11 14:33:59
我正在尝试遍历 JSON 对象/列表以从列表中获取价格。它适用于第一个“for”循环,但是对于我的程序,我需要在第一个循环内嵌套另一个“for”循环,以便在第一个循环停止的地方有效地继续迭代。编辑:我很抱歉,因为我可能不太清楚为什么我要以这种方式构造这段代码。这可能不是最好的解决方案,因为我对 python 不是很有经验,但我试图根据这个 JSON 的历史价格来模拟价格数据的循环流。因此,当价格等于第一个循环中的某个值时,我试图在具有不同 if 语句的嵌套循环中从最后一个循环停止的地方(它读取的最后一个价格)继续数据流,现在第一个已被触发。我知道这可能是解决此问题的一种非常糟糕的方法,我很高兴听到有关如何以更简单的方式解决此问题的建议。for i in json:    time.sleep(1)    price = i['p']    if price == "0.00000183":        print("foo")        for i in json:            time.sleep(1)            price = float(i['p'])            if price == "0.00000181":                print("sold")            else:                continue    elif price == "0.00000185":        print ("sold")        break    else:        continueJSON 列表的示例片段:[    {        "a":4886508,        "p":"0.00000182",        "q":"10971.00000000",        "f":5883037,        "l":5883037,        "T":1566503952430,        "m":1,        "M":1    },    {        "a":4886509,        "p":"0.00000182",        "q":"10971.00000000",        "f":5883038,        "l":5883038,        "T":1566503953551,        "m":1,        "M":1    },    {        "a":4886510,        "p":"0.00000182",        "q":"10971.00000000",        "f":5883039,        "l":5883039,        "T":1566503954431,        "m":1,        "M":1    }]
查看完整描述

3 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

您在列表中有 3 个嵌套的 dicts,并且您使用一个值price来存储所有 3 个;因此覆盖每次迭代的值。

我建议使用简单的列表理解来获取每个子字典的价格。

[i['p'] for i in json]

这导致:

['0.00000182', '0.00000182', '0.00000182']

虽然作为一个预警有一个内置模块,json所以如果你想在将来使用它,你将需要使用一个更具描述性的名称;以及您的其他命名约定首先考虑更好的约定。

PS价格值是字符串,因此与int比较没有意义


查看完整回答
反对 回复 2022-05-11
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

采用pandas

import pandas as pd
  • 问题是我如何迭代json

    • 我认为真正的问题和目标是,我如何从这个对象访问我的数据并从中收集洞察力。

    • 这就是 的力量pandas。现在所有信息都可用且易于使用。

如果数据在文件中,如图所示:

df = pd.read_json('file.json')

如果数据只是一个命名对象(例如data = [{...}, {...}, {...}]

df = pd.DataFrame(data)

输出df

//img1.sycdn.imooc.com//627b58fa0001374705180114.jpg

获取p或任何其他信息:

p_list = df.p.tolist()

print(p_list)


>>> ['0.00000182', '0.00000182', '0.00000182']


查看完整回答
反对 回复 2022-05-11
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

抱歉,伙计们,我应该更清楚地说明我正在寻找的东西可能比我做出来的东西或我描述它的方式更简单。我基本上只是想从第一个停止的地方继续第二个循环,我现在发现这是一个不错的解决方案。


elementCount = 0

for i in json:

    time.sleep(1)

    price = i['p']

    elementCount = elementCount + 1


    if price == "0.00000183":

        print("foo")


        for i in json[elementCount:]:

            time.sleep(1)

            price = float(i['p'])

            if price == "0.00000181":

                print("sold")

            else:

                continue


    elif price == "0.00000185":

        print ("sold")

        break


    else:

        continue

我基本上只是不明白从列表中的某个元素继续迭代的格式,就像这样 [40:]。感谢您的所有回答和帮助。


查看完整回答
反对 回复 2022-05-11
  • 3 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号