首页 > 解决方案 > 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

标签: pythonjsondictionary

解决方案


你可以使用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}}

推荐阅读