python - 如何在 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"
}
我主要需要帮助:
- 如何只选择我需要的货币?仅像“BGN”、“CNY”和“NZD”。我正在使用 Pyhton。
在这方面获得一些建议也会非常有帮助:
- 过滤掉货币后,我需要在 mysql 中针对这些数据创建两个表,其中一个表包含所有货币和其他历史汇率。具有一对多的关系。从上面提到的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 | 根据
然后,您可以轻松地按日期或货币进行排序和过滤,这很可能是您大部分时间想要的。
推荐阅读
- python - trs = table.find_all('tr')[1:] AttributeError: 'NoneType' 对象没有属性 'find_all'
- javascript - 无法查询禁用的选择元素
- java - 我不知道为什么会收到“无效的 XML 字符错误”
- python - 如何使用 get_default_cli 模块指定空参数(例如 nsg)?
- json - GraphDB 导出/导入或 SPARQL 将数据从存储库传输到另一个
- python - 如何打乱 3 个独立函数的打印语句?
- php - 尝试在空 Auth::user() 多重身份验证系统上读取属性“id”
- amazon-web-services - 用于 ecs 服务发现的 aws cloudwatch 代理
- javascript - 未捕获的 ReferenceError:未定义 DashRenderer
- sql-server - MS Sql Server OPENJSON 功能有问题