Python 如何从这个特定的JSON文件示例中迭代和提取数据
我试图用Python从JSON文件中提取数据 主要是,我想从“技术”部分提取日期和时间,将其放在数据帧的一列中,以及提取“AKG”编号并将其放在数据帧的第二列中。是的,我看过类似的问题,但这个问题是不同的。谢谢你的帮助 下面是JSON文件的downNdirty示例:Python 如何从这个特定的JSON文件示例中迭代和提取数据,python,json,extraction,Python,Json,Extraction,我试图用Python从JSON文件中提取数据 主要是,我想从“技术”部分提取日期和时间,将其放在数据帧的一列中,以及提取“AKG”编号并将其放在数据帧的第二列中。是的,我看过类似的问题,但这个问题是不同的。谢谢你的帮助 下面是JSON文件的downNdirty示例: { 'Meta Data': { '1: etc' '2: etc'}, 'Technicals': { '2017-05-04 12:00': { 'AKG': '6
{ 'Meta Data': { '1: etc'
'2: etc'},
'Technicals': { '2017-05-04 12:00': { 'AKG': '64.8645'},
'2017-05-04 12:30': { 'AKG': '65.7834'},
'2017-05-04 13:00': { 'AKG': '63.2348'}}}
正如你所看到的,让我感到困惑的是,随着时间的推移,日期保持不变AKG’永远不会改变,但数字会改变。下面是我一直在使用的一些相关代码。我可以提取日期和时间,但我似乎无法获得AKG的数字。注意,我不需要“AKG”,只需要号码
我要提到的是:我正在创建一个数据框,因为在使用数据创建绘图时,这将更容易使用…对吗?我愿意接受一系列的列表等等,或者任何更简单的东西,如果这最终能帮助我完成情节的话
akg_time = []
akg_akg = []
technicals = akg_data['Technicals'] #akg_data is the entire json file
for item in technicals: #this works
akg_time.append(item)
for item in technicals: #this not so much
symbol = item.get('AKG')
akg_akg.append(symbol)
pp.pprint(akg_akg)
error: 'str' object has no attribute 'get'
你几乎成功了。你甚至不需要第二个循环。您可以将
akg
值附加到第一个值中:
for key in technicals: # renaming to key because that is a clearer name
akg_time.append(key)
akg_akg.append(technicals[key]['AKG'])
您的错误是因为您认为
项
(或键
)是dict,而不是dict。它只是一个字符串,是technicals
字典的键之一,因此实际上需要使用symbols=technicals[key].get('AKG')
你就快拿到了。你甚至不需要第二个循环。您可以将akg
值附加到第一个值中:
for key in technicals: # renaming to key because that is a clearer name
akg_time.append(key)
akg_akg.append(technicals[key]['AKG'])
您的错误是因为您认为
项
(或键
)是dict,而不是dict。它只是一个字符串,是technicals
字典的键之一,因此实际上需要使用symbols=technicals[key].get('AKG')
尽管Coldspeed的答案是正确的:当你有一个字典时,你会循环通过键和值,如下所示:
Python 3
for key,value in technicals.items():
akg_time.append(key)
akg_akg.append(value["akg"])
Python 2
for key,value in technicals.iteritems():
akg_time.append(key)
akg_akg.append(value["akg"])
尽管Coldspeed的答案是正确的:当你有一个字典时,你会循环通过键和值,如下所示: Python 3
for key,value in technicals.items():
akg_time.append(key)
akg_akg.append(value["akg"])
Python 2
for key,value in technicals.iteritems():
akg_time.append(key)
akg_akg.append(value["akg"])
我知道这将是最简单的答案。非常感谢。也许应该上床睡觉,明天再看一遍。“技术[关键]”是我一直缺少的。哦,谢谢你对“关键”重命名的建议。这确实更有意义,而且更容易遵循代码的逻辑。@PatrickGalt很乐意提供帮助。别忘了,如果这个答案有用的话,你总是可以接受的。干杯:)你能投票支持我的问题吗?我在“问题炼狱”中是因为一些挫伤的自尊心…也就是说,他们没有继续前进,而是决定对我的问题(前一个问题)发牢骚和牢骚…这个问题已经很轻松地得到了回答。谢谢我知道这将是最简单的答案。非常感谢。也许应该上床睡觉,明天再看一遍。“技术[关键]”是我一直缺少的。哦,谢谢你对“关键”重命名的建议。这确实更有意义,而且更容易遵循代码的逻辑。@PatrickGalt很乐意提供帮助。别忘了,如果这个答案有用的话,你总是可以接受的。干杯:)你能投票支持我的问题吗?我在“问题炼狱”中是因为一些挫伤的自尊心…也就是说,他们没有继续前进,而是决定对我的问题(前一个问题)发牢骚和牢骚…这个问题已经很轻松地得到了回答。谢谢记住这是在内存中创建一个新的列表,复制所有的键和值,所以它肯定没有在键上迭代那么有效。等等?这里分配了一个二元数:technicals=akg_数据['technicals']。这真的会创建一个新的列表吗?毫无意义。我遗漏了什么?只是分配了参考。它是O(1)。我的意思是
technicals.items()
。记住这是在内存中创建一个新列表,复制所有的键和值,所以它肯定没有在键上迭代那么有效。等等?这里分配了一个二元数:technicals=akg_数据['technicals']。这真的会创建一个新的列表吗?毫无意义。我遗漏了什么?只是分配了参考。它是O(1)。我的意思是technicals.items()
。