【问题标题】:how to filter nested dictionaries of a json file, in Python如何在 Python 中过滤 json 文件的嵌套字典
【发布时间】:2020-07-29 06:48:08
【问题描述】:

我有一个 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 结构中存储哪个是正确的数据库结构?

【问题讨论】:

    标签: python dictionary database-design filtering one-to-many


    【解决方案1】:

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

    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 | 基础

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

    【讨论】:

    • 而不是单个表,如果我希望有 2 个表,一个用于货币,另一个用于历史数据,您建议使用哪个公共列(加入)?
    • 历史数据是什么意思?表 1 和表 2 的目的是什么?如果您以后只想与历史数据进行比较,则以相同的顺序构建两个表是有意义的
    • 无论如何,您可能想问另一个关于数据库结构的单独问题,因为这是一个全新的话题。如果我的回答对您的问题有帮助,请标记为已接受,谢谢。
    猜你喜欢
    • 2021-09-19
    • 1970-01-01
    • 2018-05-31
    • 2012-06-25
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 2022-07-13
    相关资源
    最近更新 更多