Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [PYTHON] Esercizio su manipolazione file di testo, liste e dizionari

    Salve a tutti,
    sono un neofita ovviamente.
    Ho trovato questo esercizio su un testo che sto studiando,qualcuno mi aiuta a risolverlo?

    "Script che indicizza tutti i file di una specifica direcotry fornita da utente.
    Deve costruire un dizionario in cui le chiavi sono tutte le parole univoche di tutti i file
    (descritte dall’espressione regolare r"w+" , trattando le parole senza distinguere fra lettere maiuscole e minuscole),
    e il valore di ogni voce e' una lista di nomi di file che contengono tale parola.

    Per esempio,se la parola aloha è menzionata nei file early-internet.dat e hawaiian-travel.txt,
    il dizionario dovrà contenere la voce:
    {..., 'aloha': ['early-internet.dat', 'hawaiian-travel.txt'],...}."

    Non so bene come collegare la lista di parole univoche con le chiavi del dizionario ed associare la lista dei files a cui appartengono.
    Per ora ho fatto questo:

    for root, dirs, files in os.walk(path):

    for name in files:

    # Apro file
    file = open(os.path.join(path,name))

    # Divido il file in una lista di parole
    wordss = re.findall(r"\w+",file.read())

    # Elimino dalla lista di parole i duplicati
    wordss = list(set(wordss))

    # Ottengo un dizionario dalla lista parole non duplicare del file
    diz = dict(enumerate(wordss))

    # Creo un dizionario con le keys che corrispondono ai values di diz e con values nome file usato
    for v in diz.values():
    d[v]=name

    Adesso ho n dizionari comporti da chiave=parola_univoca valore=nome_file.

    Come faccio ad unire questi N dizionari in un unico dizionario strutturato come spiegato?

    Cioè con chiave = parola_univoca valore = lista_file_di_appartenenza ?


  2. #2
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    dopo che hai la lista di parole univoche per ogni file, scorrila, aggiungi ogni elemento della lista come chiave e come valore setta di default una lista che conterrà i nomi dei file che andrai ad "appendere"

    la cosa a cui devi prestare attenzione è gestire la presenza o meno dell'elemento nel dizionario (e se leggi bene, ti ho dato uno spunto per il metodo da usare nella frase precedente)...

    e ricordati di rendere tutte le chiavi minuscole o maiuscole (cosa che non mi pare tu faccia al momento)

  3. #3
    Ciao,
    grazie per il suggerimento.
    Ho risolto cosi:

    finaldict=dict()
    for w in words:
    if w not in finaldict:
    finaldict[w]=list([name])
    else:
    finaldict[w].append(name)

  4. #4
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Guarda il metodo setdefault di dict, puoi evitare il codice che hai scritto (default sarà una lista e dopo la chiamata al metodo append il valore)
    Una linea di codice invece di 4

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.