我尝试遍历一个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:
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
}
]
型
5条答案
按热度按时间bvjxkvbb1#
在列表中有3个嵌套的dict,并且使用一个值
price
来存储所有3个;因此,每次迭代都要使用该值。我建议使用列表解析来获取每个子字典的价格。
字符串
这导致:
型
虽然作为一个预先警告,有一个内置的模块称为
json
,所以如果你想在未来使用它,你将需要使用一个更具描述性的名称;以及您的其他命名约定是非常没有信息摆在首位,考虑更好的约定。P.S的价格值是字符串,因此它是没有意义的比较,int的
vi4fp9gy2#
抱歉,伙计们,我应该更清楚地表明,我所寻找的可能比我所做的或我所描述的更简单。我基本上只是想从第一个停止的地方继续第二个循环,像这样的东西,我现在发现是一个好的解决方案。
字符串
我基本上只是不明白从列表中的某个元素继续迭代的格式,比如[40:]。谢谢你的回答和帮助。
qco9c6ql3#
您的示例代码没有多大意义,因此不清楚您要实现什么。
忽略这一点,如果你使用
json.load()
来读取你的文件,结果将是一个Python字典列表(相当于JSONobject
s)。然后你可以直接遍历这个列表-你不需要做任何其他事情来转到下一个字典/对象。在每个字典/对象中,你可以随机访问它所包含的键/值对。如果你出于某种原因想要覆盖它们,你可以使用
obj.keys()
,obj.values()
或obj.items()
,就像你可以使用任何字典一样。这里有一个小的例子,我说:
字符串
7ajki6be4#
使用
pandas
字符串
json
pandas
的强大之处。现在所有的信息都可用并且易于使用。如果数据在文件中,如图所示:
型
如果数据只是命名对象(例如
data = [{...}, {...}, {...}]
)型
df
输出:的数据
获取
p
或任何其他信息:型
30byixjq5#
你可以使用同一个迭代器对象编写两个循环。你只需要从你的
json
字典列表中创建迭代器:字符串
请注意,只有当内部循环在某个时候被
break
语句中断时,这才有意义。否则,它将消耗迭代器的所有内容,外部循环将什么都不剩。如果你期望这样,你可能应该跳出外部循环,并在同一级别编写(以前的)内部循环:型
请注意,我在示例代码中使用了
json_data
,而不是变量名json
。使用json
作为变量名可能是一个坏主意,因为它可能是您用来解析数据的模块的名称。重用该名称可能会引起混淆(例如json = json.load(filename)
只能运行一次)。