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 Python@lists.python.it http://lists.python.it/mailman/listinfo/python