Salve a tutti, il mio intento è quello di scrivere un piccolo programma che mi
consente di inizializzare a zero un'intera matrice che poi risulterà essere una
sorta di "tabella" per vedere quali registi e attori hanno lavorato insieme,
indipendentemente dal film, descritti dal file prova.json. Se un attore e un
regista qualunque hanno lavorato insieme, quindi non per forza nello stesso
film, sulla matrice, al posto dello zero, dovrei inserire 1. Perciò, 1 == True
and 0 == False (0, lasciato, a seguito dell'inizializzazione, nella matrice).
Quello che manca, è proprio un collegamento tra la lettura degli
attori/registi, che hanno recitato insieme, dal file json, e la sovrascrittura
degli 1 (True) in matrice. In allegato i file di lavorazione. Il file Excel non
va integrato nel progetto. E' solo uno schema per capire come dovrà funzionare
il codice.
RingraziandoVi per la Vostra attenzione,cordiali saluti.Giuseppe Caminiti
Matrice.xlsx
Description: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
# -*- coding: utf-8 -*-
import json
def actorDirGraph(filmfile):
with open(filmfile, 'rU') as f: # apri il file json e nominalo come "f"
film = json.load(f) # carica il suo contenuto e assegnalo alla variabile "film"
set_actors = set() # dichiara un insieme set e due liste vuote per i registi e gli attori
lista_directors = []
lista_actors = []
for k, v in film.items(): # itera sulle coppie chiave - valore, (film - registi/attori)
for actor in v['ACTORS']: # itera su ogni attore nel file json e mettilo nell'insieme set
set_actors.add(actor) # PRIMA PROVA, con l'insieme set, per elimimare i doppioni degli attori
for director in v['DIRECTORS']: # itera su ogni regista nel file json e mettilo nella lista nuova per i registi
lista_directors += [director]
for actor_inSet in set_actors: # itera su ogni attore nell'insieme set e mettilo nella nuova lista per gli attori
lista_actors += [actor_inSet]
elimina(lista_actors, lista_directors, film) # chiamata a un'altra funzione, elimina, scritta esternamente
def elimina(lista_actors, lista_directors, film): # SECONDA PROVA, funzione che serve a levare i doppioni all'interno della lista degli attori
for k, v in film.items(): # itera sulle coppie chiave - valore, (film - registi/attori)
for i in lista_actors: # itera su ogni attore nella lista degli attori
if lista_actors.count(i) > 1: # se un attore è ripetuto più di una volta
lista_actors.remove(i) # rimuovi i doppioni
elimina(lista_actors, lista_directors, film) # esegui il processo ricorsivamente
#matrice = [range(0, len(lista_actors))] * len(lista_directors) primo modo per costruire la matrice (commentato)
righe = [] # secondo modo per costruire la matrice, con ciclo for
for x in range(0, len(lista_actors)): # itera su ogni elemento dalla lista che va da 0 alla lunghezza della lista degli attori (crea tante celle quante sono le posizioni della lista degli attori)
colonne = [] # definisci una lista nuova per le colonne
for j in range(0, len(lista_directors)): # itera su ogni elemento dalla lista che va da 0 alla lunghezza della lista dei registi (crea tante celle quante sono le posizioni della lista dei registi)
colonne.append(0) # inizializza la matrice, cioè ad ogni elemento, sostituisci il valore zero
righe.append(colonne) # aggiungi le colonne alle righe per formare la matrice
print righe # stampa la matrice
actorDirGraph('prova.json') # chiamata alla funzione actorDirGraph, file di input prova.json
prova.json
Description: Binary data
_______________________________________________ Python mailing list [email protected] http://lists.python.it/mailman/listinfo/python
