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

2024-04-26 12:29:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试遍历一个JSON对象/列表,从列表中获取价格。对于第一个“for”循环,它工作得很好,但是对于我的程序,我需要在第一个循环中嵌套另一个“for”循环,在第一个循环停止的地方有效地继续迭代。你知道吗

编辑:我很抱歉,因为我可能不太清楚我为什么要这样构造代码。这可能不是最好的解决方案,因为我对python不是很有经验,但我正在尝试根据这个JSON的历史价格模拟价格数据的循环流。因此,当price等于第一个循环中的某个值时,我试图在一个嵌套循环中继续最后一个循环结束时的数据流(它读取的最后一个price),使用不同的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:
        continue

JSON列表的示例段:

[
    {
        "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
    }
]

Tags: 对象injson列表foriftime价格
3条回答

您的示例代码没有多大意义,因此不清楚您要实现什么。你知道吗

忽略这一点,如果使用^{}读取文件,结果将是一个Python字典列表(相当于JSONobject)。之后,您就可以遍历这个列表-您不需要做任何其他事情就可以转到下一个字典/对象。你知道吗

在每个字典/对象中,您可以随机访问它包含的键/值对。如果你出于某种原因想遍历它们,你可以使用obj.keys()obj.values()obj.items(),就像你可以使用任何字典一样。你知道吗

下面是我要说的一个小例子:

import json

filename = 'list_sample.json'

with open(filename) as json_file:
    object_list = json.load(json_file)

for obj in object_list:
    if obj['p'] == "0.00000183":
        print("foo")
        price = float(obj['p'])
        print(price)

列表中有3个嵌套的dict,并且使用一个值price来存储所有3个dict;因此每次迭代都会覆盖该值。你知道吗

我建议使用一个简单的列表理解来获得每个子目录的价格

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

这将导致:

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

尽管有一个名为json的内置模块作为预警,但是如果您想在将来使用它,您需要使用一个更具描述性的名称;而且您的其他命名约定是非常非信息性的,首先考虑更好的约定。你知道吗

另外,价格值是字符串,因此与int相比毫无意义

使用pandas

import pandas as pd
  • 问题是如何遍历json
    • 我认为真正的问题和目标是,我如何从这个对象访问我的数据并从中收集见解。你知道吗
    • 这就是pandas的力量。现在所有的信息都是可用的和易于使用的。你知道吗

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

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

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

df = pd.DataFrame(data)

df的输出:

enter image description here

获取p,或任何其他信息:

p_list = df.p.tolist()
print(p_list)

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

相关问题 更多 >