如何在 Python 中过滤 json 文件的嵌套字典

how to filter nested dictionaries of a json file, in Python

我有一个 JSON 文件,其中的数据如下所示:

示例数据:(实际数据会有多年的汇率)

原文:

{
   "rates":{
      "2018-01-22":{
         "BGN":1.9558,
         "TRY":4.6552,
         "CNY":7.8374,
         "NOK":9.6223,
         "NZD":1.6758
      },
      "2018-01-09":{
         "BGN":1.9558,
         "TRY":4.4843,
         "CNY":7.7865,
         "NOK":9.6715,
         "NZD":1.6601
      }
   },
   "start_at":"2018-01-01",
   "base":"EUR",
   "end_at":"2018-02-01"
}

预计:

{
   "rates":{
      "2018-01-22":{
         "BGN":1.9558,
         "CNY":7.8374,
         "NZD":1.6758
      },
      "2018-01-09":{
         "BGN":1.9558,
         "CNY":7.7865,
         "NZD":1.6601
      }
   },
   "start_at":"2018-01-01",
   "base":"EUR",
   "end_at":"2018-02-01"
}

我主要需要帮助:

  1. 我怎样才能 select 只有我需要的货币?只喜欢 'BGN' 、'CNY' 和 'NZD'。我正在使用 Pyhton。

在这方面获得一些建议也会很有帮助:

  1. 过滤掉货币后,我需要在 mysql 中的此数据上创建两个 table,其中一个 table 包含所有货币和其他历史汇率。与一对多的关系。从上面提到的 dict 结构中存储哪个数据库结构是正确的?

你可以通过 list/dict 理解来解决它。但是有不止一种方法可以做到这一点。这是 list/dict 理解的示例。在变量选择中,你输入所有你想保留的货币:

data = {'rates': {'2018-01-22': {'BGN': 1.9558, 'TRY': 4.6552, 
'CNY': 7.8374, 'NOK': 9.6223, 'NZD': 1.6758}, '2018-01-09': 
{'BGN': 1.9558, 'TRY': 4.4843, 'CNY': 7.7865, 'NOK': 9.6715, 
'NZD': 1.6601}}, 'start_at': '2018-01-01', 'base': 'EUR', 
'end_at': '2018-02-01'}

choice = ("BGN", "CNY", "NZD")

filtered = {date: {x: data.get("rates").get(date).get(x) for x in data.get("rates").get(date) if x in choice} for date in data.get("rates")}

data["rates"] = filtered

print(data)

关于数据库: 我可能会选择像下面这样的专栏。但这也取决于数据的使用方式。

日期 | 货币 1 | ... | 货币N | 基地

然后您可以轻松地按日期或货币进行排序和过滤,这很可能是您大多数时候想要的。