简体   繁体   English

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

[英]How can i create multiple sets from a set of tuples

I am very new to python and am taking an IoT course this semester.我对python非常陌生,本学期正在学习IoT课程。 Currently, we are learning about sets , tuples , and dictionaries .目前,我们正在学习setstuplesdictionaries

My homework assignment right now is I am given a .json data file with one GIANT set of tuples .我现在的家庭作业是给我一个.json数据文件,其中set GIANT tuples

Each tuple has 6 elements每个元组有 6 个元素

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

there are 15 different nodes (0-14) and each node has its own ^^^^^^^data^^^^^^^ .有 15 个不同的nodes (0-14),每个节点都有自己的^^^^^^^data^^^^^^^ I want to create a separate list for each node and make a new tuple with only [nodeID, temperature, dateData]我想为每个节点创建一个单独的列表,并创建一个只有[nodeID, temperature, dateData]

After the sets are made for each node value.在为每个node值设置集合之后。 I want to print the max/min values of each node with their corresponding dates.我想打印每个节点的max/min及其相应的日期。

I don't know if I am being unclear, any help is appreciated.我不知道我是否不清楚,感谢任何帮助。 My code is included.我的代码包括在内。

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)

To get the maximum value of temperature, and the corresponding node and date it was recorded in, we can simply use sorted with a key.要获取温度的最大值,以及记录它的相应节点和日期,我们可以简单地使用带键的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])

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM