我有一个基本的网络抓取工具,用于获取天气数据并将其发布到 Firebase。目前,我的所有数据都存储在 2D 列表中,以便于处理,但是 Python 列表包含用于格式化的方括号(显然)。 我的问题是 Firebase RTDB 将每个方括号视为 Json 树中的新项目,因此在打印到终端时说这是我的列表:
[{'Weather Data': [{'Houston': {'weather': 'Chance of showers', 'uvindex': '0', 'category': 'Low', 'timeabove': 'None'}}, {'Seattle': {'weather': 'Chance of showers', 'uvindex': '3', 'category': 'Moderate', 'timeabove': '1 pm to 2 pm'}}]}]
我希望我的 Json 树看起来像:
Weather Data
Houston
weather: Chance of showers
uvindex: 0
category: Low
timeabove: None
etc...
但是,这是我的 RTDB 上出现的情况:
0
Weather Data
0
Houston
weather: Chance of showers
uvindex: 0
category: Low
timeabove: None
1
Seattle
weather: Chance of showers
uvindex: 0
category: Low
timeabove: None
etc etc
通过使用数据库,我可以看到正是方括号在 Json 树中创建了额外的节点。有没有办法解决 Firebase 中的格式问题,或者有一个函数可以清理列表以将其转换为更干净的 Json 格式? Json.dumps(x) 也会产生同样的问题。如果可能的话,我希望不要从 2D 列表中提取每个单独的列表。
简单来说,只要去掉
list
,即拉出包装纸dict
中的list
:
#!/usr/bin/env python3
import json
twoD = [{'Weather Data': [{'Houston': {'weather': 'Chance of showers', 'uvindex': '0', 'category': 'Low', 'timeabove': 'None'}}, {'Seattle': {'weather': 'Chance of showers', 'uvindex': '3', 'category': 'Moderate', 'timeabove': '1 pm to 2 pm'}}]}]
city_data = { city: data for val in twoD[0]['Weather Data'] for city, data in val.items()}
weather_data = {'Weather Data': city_data}
print(json.dumps(weather_data, indent=2))
输出:
{
"Weather Data": {
"Houston": {
"weather": "Chance of showers",
"uvindex": "0",
"category": "Low",
"timeabove": "None"
},
"Seattle": {
"weather": "Chance of showers",
"uvindex": "3",
"category": "Moderate",
"timeabove": "1 pm to 2 pm"
}
}
}