forked from polito-info-2022/Esempi-esame
-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathsoluzione.py
72 lines (56 loc) · 1.96 KB
/
soluzione.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# Soluzione proposta al tema d'esame "Gestione allarmi robot"
import csv
from operator import itemgetter
from pprint import pprint
def leggi_allarmi(nome_file):
"""
Legge un file nel formato di allarmi.csv e costruisce una lista
di dizionari corrispondenti ai dati contenuti nel file.
Args:
nome_file (str): nome del file da leggere
Returns:
list[dict]: una lista che contiene un elemento per ogni riga del file.
"""
allarmi = []
with open(nome_file, "r", encoding="utf-8") as f:
reader = csv.DictReader(f, delimiter=";")
for item in reader:
allarmi.append(
{
"id": int(item["fk_id_robot"]),
"severity": int(item["severity"]),
"text": item["alarm_text"].strip(),
}
)
return allarmi
def statistiche_allarmi(allarmi):
"""
Costruisce una lista [id robot, numero di allarmi] ordinata
in modo descrescente per numero di allarmi
"""
# contiamo quanti allarmi, faccio un dizionario id->numero
frequenze = dict()
for allarme in allarmi:
id = allarme["id"]
if id in frequenze:
frequenze[id] = frequenze[id] + 1
else:
frequenze[id] = 1
# convertiamo il dizionario in lista in modo da poterlo ordinare
statistiche = list(frequenze.items())
statistiche.sort(key=itemgetter(1), reverse=True)
return statistiche
def main():
allarmi = leggi_allarmi("allarmi.csv")
# pprint(allarmi)
statistiche = statistiche_allarmi(allarmi)
for s in statistiche:
print(f"Per il robot {s[0]} si sono verificati {s[1]} allarmi")
max_severita = max(allarmi, key=itemgetter("severity"))
print(
f'Il livello massimo di severità {max_severita["severity"]} è stato raggiunto dai seguenti robot:'
)
for a in allarmi:
if a["severity"] == max_severita["severity"]:
print(a["id"])
main()