如何从一组元组创建多个集合

2024-04-23 09:50:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python很陌生,这学期我要上一门IoT课程。目前,我们正在学习setstuplesdictionaries

我现在的家庭作业是给我一个.json数据文件,其中有一个巨大的set{}

每个元组有6个元素

[nodeID, dateData, temperature, humidity, pressure, precipitation] 

有15个不同的nodes(0-14),每个节点都有自己的^^^^^^^^。我想为每个节点创建一个单独的列表,并只使用[nodeID, temperature, dateData]创建一个新的元组

为每个node值进行设置之后。我想打印每个节点的max/min值及其相应的日期

我不知道我是否不清楚,感谢您的帮助。包括我的代码

import json
from datetime import date, timedelta, datetime


#open .json file as "weatherData"
with open('DenverData.json', 'r') as infile:
weatherData = json.load(infile)

dataSummary = dict()
dataSummary['number_nodes'] = 0
dataSummary['start_date']  = 0
dataSummary['end_date'] = 0
dataSummary['number_days'] = 0
dataSummary['node_temperature'] = 0
dataSummary['node_humidity'] = 0
dataSummary['node_pressure'] = 0
dataSummary['node_precipitation'] = 0
dataSummary['temperature_range'] = 0
dataSummary['humidity_range'] = 0
dataSummary['pressure_range'] = 0
dataSummary['precipitation_range']  = 0
dataSummary['extreme_dates'] = 0


#LISTS

node_list = [nodeID for [nodeID, dateData, temperature, humidity, pressure, precipitation] in 
weatherData]
date_list = sorted(list(set(date_list)))
temp_list = [temperature for [nodeID, dateData, temperature, humidity, pressure, precipitation] in 
weatherData]
humidity_list = [humidity for [nodeID, dateData, temperature, humidity, pressure, precipitation] in 
weatherData]
precipitation_list = [precipitation for [nodeID, dateData, temperature, humidity, pressure, 
precipitation] in weatherData]
pressure_list = [pressure for [nodeID, dateData, temperature, humidity, pressure, precipitation] in 
weatherData]

#EXTREMES 
earliestDay = date_list[0]
latestDay = date_list[-1]

max_temp = max(temp_list)
min_temp = min(temp_list)

max_pressure = max(pressure_list)
min_pressure = min(pressure_list)

max_humidity = max(humidity_list)
min_humidity = min(humidity_list)

max_precipitation = max(precipitation_list)
min_precipitation = min(precipitation_list)


#PRINTS

print("\nNumber of different nodes:                              ", len(set(node_list)), "\n") 
#number of sets

print("Amount of days data collected:                          ", len(set(date_list))) #number of 
days
print("Earliest date of Data collected:                        ", earliestDay) #the earliest date
print("Latest date of data collected:                          ", latestDay, "\n") #the latest date

print("Amount of different temperature readings:               ", len(set(temp_list)))
print("Maximum temperature:                                    ", max(temp_list), "[C]") 
print("Minimum temperature:                                   ", min(temp_list), "[C]\n")

print("Amount of humidity readings:                            ", len(set(humidity_list)))
print("Maximum Humidity:                                       ", max(humidity_list), "[%RH]") 
print("Minimum Humidity:                                       ", min(humidity_list), "[%RH]\n")

print("The number of different precipitation readings are:     ",len(set(precipitation_list)))
print("Maximum Precipitation:                                  ", max(precipitation_list), "[in]")
print("Minimum Precipitation:                                  ", min(precipitation_list), " [in]")

print("The number of different pressure readings are:          ",len(set(pressure_list)))
print("Maximum Pressure:                                       ", max(humidity_list), "[ATM]")
print("Minimum Pressure:                                       ", min(humidity_list), "[ATM]\n")

#FULL DATA PRINTS

print("Tuple syntax:\n [NodeID, 'Date', Temperature, Humidity, Pressure[mB], Precipitation]\n", 
weatherData[0], "\n") 
print("The different nodes are labeled as one of the following: \n", set(node_list), "\n") 
print("Dates that data were collected:\n", sorted(set(date_list)), "\n") 
print("Temperatures that were recorded:\n", sorted(list(set(temp_list)))) 
print("Precipitation measurements:\n", sorted(set(precipitation_list)))
print("Pressure values:\n", sorted(set(pressure_list)))

#Summary Report to json file
dataSummary['number_nodes'] = len(set(node_list))
dataSummary['start_date'] = date_list[-1]
dataSummary['end_date'] = date_list[0]
dataSummary['number_days'] = len(set(date_list))
dataSummary['node_humidity'] = range(set(humidity_list))
dataSummary['node_temperature'] = len(set(temp_list))
dataSummary['node_pressure'] = len(set(pressure_list)) 
dataSummary['node_precipitation'] = len(set(precipitation_list)) 
dataSummary['temperature_range'] = max_temp, min_temp
dataSummary['humidity_range'] = max_humidity, min_humidity
dataSummary['pressure_range'] = max_pressure, min_pressure
dataSummary['precipitation_range'] = max_precipitation, min_precipitation


#PREVIEW
print(dataSummary)

#DUMP
with open('denver_summary.json', 'w') as outfile:
json.dump(dataSummary, outfile)

Tags: ofnodedatelenmintempmaxlist
1条回答
网友
1楼 · 发布于 2024-04-23 09:50:22

要获得温度的最大值以及相应的节点和记录温度的日期,只需使用sorted键即可

new_list = [i[0], i[2], i[1] for i in weatherData] #node_id, temperature, date
list_sorted_by_temp = sorted(new_list, key = lambda x: x[1]) #2nd element in tuple is temperature
max_temp = list_sorted_by_temp[-1]
print('max temperature was', max_temp[1], 'recorded by node', max_temp[0], 'on', max_temp[2])

相关问题 更多 >