【问题标题】:Extracting data from a JSON database (Python 3)从 JSON 数据库中提取数据 (Python 3)
【发布时间】:2023-04-07 11:27:01
【问题描述】:

我想编写一个程序,将 JSON 数据库中的数据加载到 Python 字典列表中,并添加平均温度高于冰点和低于冰点的所有次数。但是,我正在努力从数据库中成功提取信息/我担心我的算法已经关闭。我的计划: 1)定义一个从json文件加载数据的函数。 2) 定义一个从文件中提取信息的函数 3)使用提取的信息来计算温度高于或低于冰点的次数

import json

def load_weather_data(): #function 1: Loads data
    with open("NYC4-syr-weather-dec-2015.json", encoding = 'utf8') as w: #w for weather
        data = w.read()
        weather = json.loads(data)
        print(type(weather))
        return weather

def extract_temp(weather): #function 2: Extracts information on weather
    info = {}
    info['Mean TemperatureF'] = weather['Mean TemperatureF']#i keep getting a type error here
    return info

print("Above and blelow freezing")
weather = load_weather_data()
info = extract_temp(weather)
above_freezing = 0
below_freezing = 0
for temperature in weather: # summing the number of times the weather was above versus below freezing
    if info['Mean Temperature'] >32:
        above_freezing=above_freezing+1
    elif info['mean temperature']<32:
        below_freezing = below_freezing +1

print(above_freezing)
print(below_freezing)

如果您有任何想法,请告诉我!谢谢。

【问题讨论】:

  • 你可以发布示例数据 - 缩写!!! - 和完整的堆栈跟踪? print(type(weather)) 的结果是什么?
  • 我的猜测是 weather 是一个列表,您真的想在遍历列表时从每个 temperature 对象中提取温度。
  • 如果正好是 32 度呢?

标签: json python-3.x dictionary


【解决方案1】:

您正试图在开始循环之前从weather 列表中提取一次温度,而实际上您应该为循环中的每个温度对象执行此操作。您尚未发布示例数据,但我认为weather 是list,您正试图将其用作dict。下面是对整洁度的其他一些更改的修复。

import json

# fixed: call with filename so that the function works on other files
def load_weather_data(filename): #function 1: Loads data
    with open(filename, encoding = 'utf8') as w: #w for weather
        # fixed: fewer steps
        return json.load(w)

# fixed: not needed, doesn't simply anything
#def extract_temp(weather): #function 2: Extracts information on weather
#    info = {}
#    info['Mean TemperatureF'] = weather['Mean TemperatureF']#i keep getting a type error here
#    return info

print("Above and blelow freezing")

weather = load_weather_data("NYC4-syr-weather-dec-2015.json")
above_freezing = 0
below_freezing = 0

for temperature in weather: # summing the number of times the weather was above versus below freezing
    if info['Mean Temperature'] > 32:
        above_freezing += 1
    # fixed: capitalized above... so assuming it should be here too
    elif info['Mean Temperature'] < 32:
        below_freezing += 1

print(above_freezing)
print(below_freezing)

【讨论】:

  • 感谢您的尝试。我将信息更改为天气,但出现类型错误。具体来说,“列表索引必须是整数或切片,而不是 str”。我也尝试过使用 w['Mean Temperature'] 但没有任何运气。如果您对此也有想法,请告诉我。谢谢。
  • 这些是您的数据集的详细信息。哪些项目是列表和字典;什么是字段名称。由于您还没有发布数据,所以没有足够的继续!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
  • 2021-11-24
  • 2017-04-16
  • 2020-05-06
相关资源
最近更新 更多