Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

JSON: iterare per valore in dizionari

r
rosario.salerno (3010 points)
15 30 44
in Programmare in Python by (3.0k points)

Esercitandomi con le prove passate, mi sono bloccato su un esercizio dove avente un file json con dizionari in cui la chiave actors è una lista di attori e la chiave title è il titolo del film, devo ritornare gli attori che hanno recitato in k film(k dizionari visto che ogni dizionario è un film).

Ho creato questa funzione, che però nel mio caso non riporta solo le chiavi di counter da valore 6, ma anche alcune da valore 7 o 8. Cosa sbaglio? L'indentazione mi sembra corretta. E' come se invece di value == k ci fosse value >=k, per sicurezza ho fatto la prova con value>=k e mi ritorna la stessa lista in ordine diverso. Allego uno screenshot per far capire meglio : https://imgur.com/a/Qu9RO

def es4(filename,k):
    import json
    from collections import Counter
    actornames = []
    kmovies= []
    count= 0
    with open(filename) as f_:
        data = json.load(f_)
        for dictionary in data:
            for actor in dictionary['actors']:
                actornames.append(actor)
                count = Counter(actornames)
                for key,value in count.items():
                    if value == k:
                        kmovies.append(key)
    return list(set(kmovies))

630 views
closed

1 Answer

Best answer
mcarapella (1230 points)
1 8 16
by (1.2k points)
edited by

L'errore è nell'utilizzo del Counter, quella subclass crea un dizionario con tutti gli elementi "già contati" quindi non dovresti chiamarla all'interno del ciclo che aggiorna la lista actornames (dove vuoi contare). Prova ad usarla esterna a quel ciclo e vedrai che funziona.

PS: su questo forum non si può postare codice.

andrea.sterbini (207940 points)
756 1270 2377
by (208k points)
... in questo caso va bene, l'idea è che non ci si deve passare codice per fare i compiti a casa, e ormai la fase degli HW è passata
r
rosario.salerno (3010 points)
15 30 44
by (3.0k points)
Grazie, proverò ad usare Counter esternamente. Per quanto riguarda il codice, quella regola valeva solo per gli HW.
Edit: provato e funziona perfettamente. Grazie ancora!