如何从 2D Python 数组中删除方括号以设置为 Firebase RTDB

问题描述 投票:0回答:1

我有一个基本的网络抓取工具,用于获取天气数据并将其发布到 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 列表中提取每个单独的列表。

python firebase list firebase-realtime-database multidimensional-array
1个回答
0
投票

简单来说,只要去掉

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"
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.