json - 动态过滤python字典中的信息
问题描述
动态过滤python字典中的信息
您好,首先说我正在了解如何从 JSON 中过滤 python 字典中的信息,然后将它们写入 JSON 文件中举例说明一个简单但真实的例子。
工作流程
- 解码 JSON
- 处理和处理数据(将其转换为信息)
- 编码 JSON 并编写它们
这个例子
为此,我使用 CoinMarketCap 的apin,这是数据结构:
{
"data": {
"1": {
"id": 1,
"name": "Bitcoin",
"symbol": "BTC",
"website_slug": "bitcoin",
"rank": 1,
"circulating_supply": 17168112.0,
"total_supply": 17168112.0,
"max_supply": 21000000.0,
"quotes": {
"USD": {
"price": 8159.91,
"volume_24h": 6805930000.0,
"market_cap": 140090248790.0,
"percent_change_1h": -0.65,
"percent_change_24h": 5.84,
"percent_change_7d": 18.14
}
},
"last_updated": 1532445803
},
"1027": {
"id": 1027,
"name": "Ethereum",
"symbol": "ETH",
"website_slug": "ethereum",
"rank": 2,
"circulating_supply": 100891486.0,
"total_supply": 100891486.0,
"max_supply": null,
"quotes": {
"USD": {
"price": 472.418,
"volume_24h": 2187530000.0,
"market_cap": 47662953974.0,
"percent_change_1h": -1.42,
"percent_change_24h": 2.14,
"percent_change_7d": -1.83
}
},
"last_updated": 1532445813
},
"52": {
"id": 52,
"name": "XRP",
"symbol": "XRP",
"website_slug": "ripple",
"rank": 3,
"circulating_supply": 39315683476.0,
"total_supply": 99991900487.0,
"max_supply": 100000000000.0,
"quotes": {
"USD": {
"price": 0.458599,
"volume_24h": 305718000.0,
"market_cap": 18030133126.0,
"percent_change_1h": -1.22,
"percent_change_24h": 1.69,
"percent_change_7d": -5.25
}
},
"last_updated": 1532445797
},
"metadata": {
"timestamp": 1532445415,
"num_cryptocurrencies": 1664,
"error": null
}
}
正如你所看到的嵌套字典,有一点你不能明确地迭代,我们必须动态地做,否则我们应该知道加密货币的 id。
我们开始字典的探索:
#!/usr/bin/python3
import json
import requests
response = requests.get("https://api.coinmarketcap.com/v2/ticker/")
data = json.loads(response.text)
def keep(data):
for i in data['data'].key():
print(i)
keep(data)
如您所见,这是迭代的复杂部分。
我设法摆脱了获得加密货币 Top10 的复杂部分:
#!/usr/bin/python3
import json
import requests
response = requests.get("https://api.coinmarketcap.com/v2/ticker/")
data = json.loads(response.text)
def keep(data):
for i in data['data'].values():
if i['rank'] <= 10:
print(json.dumps(i, indent=4))
keep(data)
但我无法将其写入 JSON 文件,希望您能帮助我,在此先感谢。
解决方案
这就是你想要做的:
import json
import requests
response = requests.get("https://api.coinmarketcap.com/v2/ticker/")
data = json.loads(response.text)
finallist=[]
def keep(data):
for i in data['data'].values():
if i['rank'] <= 10:
finallist.append(i)
keep(data)
#jsondata = json.dumps(finallist)
with open('data1sk.json', 'w') as outfile:
json.dump(finallist, outfile)
这应该会给出您想要的结果,但是您没有清楚地说明在您的情况下什么不起作用。但是,这是您可以尝试的解决方案。
推荐阅读
- javascript - 为什么Javascript事件处理程序被调用两次?
- python - 如何在 for 循环中将元素添加到列表并打印单个列表?
- unit-testing - 使用 Effort 的假 DbConnection 有问题
- python - 在python中为日志添加请求参数
- mysql - 如何规范具有多个用于特定表的表?
- c# - 防止剃刀视图mvc中的跨脚本攻击
- windows - Magento 2.3.6-p1 安装不完整并在安装时在 Magento_Theme 中显示错误
- python - 如何生成每组中具有不同条数的组条形图?
- python - 如何计算 SQLAlchemy 中组的百分比?
- python - 在 pywin32 中创建早期绑定的主要和次要是什么?