python - reFromat JSON 与 python 提取嵌套字典
问题描述
我有一些代码可以获取数据框并将数据存储在 JSON 中。然后从那里我拿那个 JSON 并将它移动到另一个字典 - 但是,它的格式很差,无法满足我的需要。
现在数据看起来像这样:
[
{
"2021-01-05": {
"low": 2.039999961853028,
"high": 3.3499999046325684,
"open": 2.640000104904175,
"adjclose": 2.630000114440918
}
},
{
"2021-01-06": {
"low": 2.3299999237060547,
"high": 3.0999999046325684,
"open": 2.6700000762939453,
"adjclose": 2.694000005722046
}
},
{
"2021-01-07": {
"low": 2.7100000381469727,
"high": 3.200000047683716,
"open": 2.75,
"adjclose": 2.930000066757202
}
},
{
"2021-01-08": {
"low": 2.809999942779541,
"high": 3.049999952316284,
"open": 2.9800000190734863,
"adjclose": 2.880000114440918
}
},
{
"2021-01-11": {
"low": 2.539999961853028,
"high": 2.930000066757202,
"open": 2.900000095367432,
"adjclose": 2.630000114440918
}
},
{
"2021-01-12": {
"low": 2.3499999046325684,
"high": 2.690000057220459,
"open": 2.630000114440918,
"adjclose": 2.4800000190734863
}
},
{
"2021-01-13": {
"low": 2.259999990463257,
"high": 2.680000066757202,
"open": 2.5,
"adjclose": 2.450000047683716
}
},
{
"2021-01-14": {
"low": 2.5,
"high": 2.740000009536743,
"open": 2.539999961853028,
"adjclose": 2.720000028610229
}
},
{
"2021-01-15": {
"low": 2.569999933242798,
"high": 2.940000057220459,
"open": 2.809999942779541,
"adjclose": 2.799999952316284
}
},
{
"2021-01-19": {
"low": 2.950000047683716,
"high": 3.25,
"open": 3.0199999809265137,
"adjclose": 3.0799999237060547
}
},
{
"2021-01-20": {
"low": 3.190000057220459,
"high": 3.900000095367432,
"open": 3.200000047683716,
"adjclose": 3.4200000762939453
}
},
{
"2021-01-21": {
"low": 3.5199999809265137,
"high": 3.859999895095825,
"open": 3.5299999713897705,
"adjclose": 3.809999942779541
}
},
{
"2021-01-22": {
"low": 3.880000114440918,
"high": 4.409999847412109,
"open": 3.900000095367432,
"adjclose": 4.34499979019165
}
},
{
"2021-01-25": {
"low": 4.019999980926514,
"high": 4.880000114440918,
"open": 4.440000057220459,
"adjclose": 4.425000190734863
}
},
{
"2021-01-26": {
"low": 4.199999809265137,
"high": 4.900000095367432,
"open": 4.739999771118164,
"adjclose": 4.460000038146973
}
},
{
"2021-01-27": {
"low": 3.7100000381469727,
"high": 4.46999979019165,
"open": 4.46999979019165,
"adjclose": 3.880000114440918
}
},
{
"2021-01-28": {
"low": 3.009999990463257,
"high": 4,
"open": 3.950000047683716,
"adjclose": 3.9700000286102295
}
},
{
"2021-01-29": {
"low": 3.5199999809265137,
"high": 3.990000009536743,
"open": 3.900000095367432,
"adjclose": 3.694999933242798
}
},
{
"2021-02-01": {
"low": 3.650000095367432,
"high": 3.900000095367432,
"open": 3.75,
"adjclose": 3.75
}
},
{
"2021-02-02": {
"low": 3.805000066757202,
"high": 4.300000190734863,
"open": 3.829999923706055,
"adjclose": 4.289999961853027
}
},
{
"2021-02-03": {
"low": 4.320000171661377,
"high": 4.690000057220459,
"open": 4.360000133514404,
"adjclose": 4.599999904632568
}
},
{
"2021-02-04": {
"low": 4.650000095367432,
"high": 5.639999866485596,
"open": 4.650000095367432,
"adjclose": 5.519999980926514
}
},
{
"2021-02-05": {
"low": 5.75,
"high": 7.460000038146973,
"open": 5.829999923706055,
"adjclose": 7.300000190734863
}
},
{
"2021-02-08": {
"low": 7.75,
"high": 9.300000190734863,
"open": 7.96999979019165,
"adjclose": 8.380000114440918
}
},
{
"2021-02-09": {
"low": 7.579999923706055,
"high": 9.489999771118164,
"open": 8.600000381469727,
"adjclose": 8.0600004196167
}
},
{
"2021-02-10": {
"low": 7.510000228881836,
"high": 8.720000267028809,
"open": 8.180000305175781,
"adjclose": 8.505000114440918
}
},
{
"2021-02-11": {
"low": 8.050000190734863,
"high": 8.800000190734863,
"open": 8.800000190734863,
"adjclose": 8.100000381469727
}
},
{
"2021-02-12": {
"low": 6.510000228881836,
"high": 8.199999809265137,
"open": 7.610000133514404,
"adjclose": 7.070000171661377
}
},
{
"2021-02-16": {
"low": 7.199999809265137,
"high": 8.050000190734863,
"open": 7.510000228881836,
"adjclose": 7.449999809265137
}
},
{
"2021-02-17": {
"low": 6.889999866485596,
"high": 7.75,
"open": 7.550000190734863,
"adjclose": 7.03000020980835
}
},
{
"2021-02-18": {
"low": 6.199999809265137,
"high": 7.010000228881836,
"open": 6.980000019073486,
"adjclose": 6.389999866485596
}
}
]
我想删除空的父嵌套字典,只将 daes 作为键。像这样的东西:
{
"2021-01-05": {
"low": 2.039999961853028,
"high": 3.3499999046325684,
"open": 2.640000104904175,
"adjclose": 2.630000114440918
},
"2021-01-06": {
"low": 2.3299999237060547,
"high": 3.0999999046325684,
"open": 2.6700000762939453,
"adjclose": 2.694000005722046
},
"2021-01-07": {
"low": 2.7100000381469727,
"high": 3.200000047683716,
"open": 2.75,
"adjclose": 2.930000066757202
}
}
作为参考,这些数据将从数据库中获取并用于制作图表。
这就是我获取数据帧并将其转换为 JSON 的方式:
def getHistoricalData(ticker_collection):
for ticker in ticker_collection:
ticker_text = ticker
ticker = Ticker(ticker)
stock_history = ticker.history(period='ytd', interval='1d')
for idx, df_select in stock_history.groupby(level=[0, 1]):
historical_dictionary = {idx[0] : [{ str(idx[1]) : { 'open' : df_select['open'][0], 'adjclose' : df_select['adjclose'][0], 'high' : df_select['high'][0], 'low' : df_select['low'][0] } } for idx, df_select in stock_history.groupby(level=[0, 1])]}
ticker_collection[ticker_text]['historicalData'] = historical_dictionary[ticker_text]
return ticker_collection
解决方案
你可以使用dict
理解。这l
是您的原始清单。
{j:i[j] for i in l for j in i}
{'2021-01-05': {'low': 2.039999961853028,
'high': 3.3499999046325684,
'open': 2.640000104904175,
'adjclose': 2.630000114440918},
'2021-01-06': {'low': 2.3299999237060547,
'high': 3.0999999046325684,
'open': 2.6700000762939453,
'adjclose': 2.694000005722046},
'2021-01-07': {'low': 2.7100000381469727,
'high': 3.200000047683716,
'open': 2.75,
'adjclose': 2.930000066757202},
'2021-01-08': {'low': 2.809999942779541,
'high': 3.049999952316284,
'open': 2.9800000190734863,
'adjclose': 2.880000114440918},
'2021-01-11': {'low': 2.539999961853028,
'high': 2.930000066757202,
'open': 2.900000095367432,
'adjclose': 2.630000114440918},
'2021-01-12': {'low': 2.3499999046325684,
'high': 2.690000057220459,
'open': 2.630000114440918,
'adjclose': 2.4800000190734863},
'2021-01-13': {'low': 2.259999990463257,
'high': 2.680000066757202,
'open': 2.5,
'adjclose': 2.450000047683716},
'2021-01-14': {'low': 2.5,
'high': 2.740000009536743,
'open': 2.539999961853028,
'adjclose': 2.720000028610229},
'2021-01-15': {'low': 2.569999933242798,
'high': 2.940000057220459,
'open': 2.809999942779541,
'adjclose': 2.799999952316284},
'2021-01-19': {'low': 2.950000047683716,
'high': 3.25,
'open': 3.0199999809265137,
'adjclose': 3.0799999237060547},
'2021-01-20': {'low': 3.190000057220459,
'high': 3.900000095367432,
'open': 3.200000047683716,
'adjclose': 3.4200000762939453},
'2021-01-21': {'low': 3.5199999809265137,
'high': 3.859999895095825,
'open': 3.5299999713897705,
'adjclose': 3.809999942779541},
'2021-01-22': {'low': 3.880000114440918,
'high': 4.409999847412109,
'open': 3.900000095367432,
'adjclose': 4.34499979019165},
'2021-01-25': {'low': 4.019999980926514,
'high': 4.880000114440918,
'open': 4.440000057220459,
'adjclose': 4.425000190734863},
'2021-01-26': {'low': 4.199999809265137,
'high': 4.900000095367432,
'open': 4.739999771118164,
'adjclose': 4.460000038146973},
'2021-01-27': {'low': 3.7100000381469727,
'high': 4.46999979019165,
'open': 4.46999979019165,
'adjclose': 3.880000114440918},
'2021-01-28': {'low': 3.009999990463257,
'high': 4,
'open': 3.950000047683716,
'adjclose': 3.9700000286102295},
'2021-01-29': {'low': 3.5199999809265137,
'high': 3.990000009536743,
'open': 3.900000095367432,
'adjclose': 3.694999933242798},
'2021-02-01': {'low': 3.650000095367432,
'high': 3.900000095367432,
'open': 3.75,
'adjclose': 3.75},
'2021-02-02': {'low': 3.805000066757202,
'high': 4.300000190734863,
'open': 3.829999923706055,
'adjclose': 4.289999961853027},
'2021-02-03': {'low': 4.320000171661377,
'high': 4.690000057220459,
'open': 4.360000133514404,
'adjclose': 4.599999904632568},
'2021-02-04': {'low': 4.650000095367432,
'high': 5.639999866485596,
'open': 4.650000095367432,
'adjclose': 5.519999980926514},
'2021-02-05': {'low': 5.75,
'high': 7.460000038146973,
'open': 5.829999923706055,
'adjclose': 7.300000190734863},
'2021-02-08': {'low': 7.75,
'high': 9.300000190734863,
'open': 7.96999979019165,
'adjclose': 8.380000114440918},
'2021-02-09': {'low': 7.579999923706055,
'high': 9.489999771118164,
'open': 8.600000381469727,
'adjclose': 8.0600004196167},
'2021-02-10': {'low': 7.510000228881836,
'high': 8.720000267028809,
'open': 8.180000305175781,
'adjclose': 8.505000114440918},
'2021-02-11': {'low': 8.050000190734863,
'high': 8.800000190734863,
'open': 8.800000190734863,
'adjclose': 8.100000381469727},
'2021-02-12': {'low': 6.510000228881836,
'high': 8.199999809265137,
'open': 7.610000133514404,
'adjclose': 7.070000171661377},
'2021-02-16': {'low': 7.199999809265137,
'high': 8.050000190734863,
'open': 7.510000228881836,
'adjclose': 7.449999809265137},
'2021-02-17': {'low': 6.889999866485596,
'high': 7.75,
'open': 7.550000190734863,
'adjclose': 7.03000020980835},
'2021-02-18': {'low': 6.199999809265137,
'high': 7.010000228881836,
'open': 6.980000019073486,
'adjclose': 6.389999866485596}}
推荐阅读
- python - 通过 python 将销售数据作为 VARCHAR 附加到 MS SQL-Server 表中,只有两位小数
- powerbi - 列匹配条件时如何显示行?
- json - 在服务器上找不到 Wordrpress wp-json -- localhost
- css - 如何自定义角度材料设计 mat-datepicker 图标大小
- python - 为什么更新类属性不会更新类的所有实例?
- python - roslibpy 消息不包含多个键值对
- powershell - 使用 PowerShell 同时覆盖多个 *.txt 文件的全部内容
- webpack - css 加载器不工作 - webpack 无法识别 css 类型文件
- sql - 我可以在 SQL 中制作数据透视表吗
- .net - Application Insights 如何拦截 SQL 调用?