首页 > 解决方案 > 如何在 Python 中过滤 json 文件的嵌套字典

问题描述

我有一个 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. 如何只选择我需要的货币?仅像“BGN”、“CNY”和“NZD”。我正在使用 Pyhton。

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

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

标签: pythondictionarydatabase-designfilteringone-to-many

解决方案


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

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 | 根据

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


推荐阅读