[Python] Lista dizionari
Correzione dalla mail precedente senza titolo: Ho il seguente problema: una lista dizionari siffati: tabella{path,cfile} Nella lista il valore della chiave path può essere ripetuto n volte. Come faccio a tirate fuori nella maniera più efficiente possibile (!!!) tutte le coppie path,cfile per un dato valore della chiave di path ? Grazie Walter ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Lista dizionari
Non è che invece intende una lista di dizionari con 2 chiavi? tabella = [{path:'blabla', cfile:'nomedelfile'}, {path:'blabla', cfile:'nomedelfile'}] 2012/6/15 Daniele Zambelli daniele.zambe...@gmail.com Il 15 giugno 2012 12:39, Walter Valenti waltervale...@yahoo.it ha scritto: Correzione dalla mail precedente senza titolo: Ho il seguente problema: una lista dizionari siffati: tabella{path,cfile} Nella lista il valore della chiave path può essere ripetuto n volte. Come faccio a tirate fuori nella maniera più efficiente possibile (!!!) tutte le coppie path,cfile Il problema non è tirar fuori, è mettere dentro elementi con chiave ripetuta: d={'a': 4, 'b': 6, 'a': 3} d {'a': 3, 'b': 6} Ciao -- Daniele www.fugamatematica.blogspot.com giusto! nel verso forse è perché non guardiamo le cose Quando non ci capiamo, ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Lista dizionari
Puoi creare una classe che implementi un dizionario di ricerca qualcosa del tipo: class MyList: def __init__(self): tabella={} cfiles={} def put(path,cfile): tabella[path]=cfile; if cfiles.has_key(path): cfiles[path].append(cfile) else: cfiles[path]=[cfile] A questo punto potresti non avere più bisogno di tabella PS: spero di non aver scritto castronerie visto che adesso sto programmando in java per android :) Il giorno 15 giugno 2012 12:56, stefano bossi ste.bo...@gmail.com ha scritto: Non è che invece intende una lista di dizionari con 2 chiavi? tabella = [{path:'blabla', cfile:'nomedelfile'}, {path:'blabla', cfile:'nomedelfile'}] -- -- Giuseppe Amato e-mail: giuam...@gmail.com ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Lista dizionari
On Fri, 15 Jun 2012 11:39:13 +0100 (BST), Walter Valenti wrote: Correzione dalla mail precedente senza titolo: Ho il seguente problema: una lista dizionari siffati: tabella{path,cfile} Nella lista il valore della chiave path può essere ripetuto n volte. Come faccio a tirate fuori nella maniera più efficiente possibile (!!!) tutte le coppie path,cfile per un dato valore della chiave di path ? Come ti hanno detto in molti, puoi avere solo chiavi singole in un dizionario. Ma puoi avere valori multipli se li metti in una lista. Il modo più idiomatico credo sia questo: In [1]: from collections import defaultdict In [4]: d = defaultdict(list) In [5]: d['foo'].append(10) In [6]: d['foo'].append(20) In [7]: d['bar'].append(30) In [8]: d Out[8]: defaultdict(type 'list', {'foo': [10, 20], 'bar': [30]}) Puoi iterare facilmente su chiavi e valori: In [10]: for k, v in d.iteritems(): for x in v: print k, x : : foo 10 foo 20 bar 30 Puoi tirare fuori tutti i valori per una chiave ripetuta: In [9]: d['foo'] Out[9]: [10, 20] O solo il primo se sei assumi ce ne sia solo uno: In [10]: d['bar'][0] Out[10]: 30 -- Daniele Varrazzo - Develer S.r.l. http://www.develer.com ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Lista dizionari
Da: stefano bossi ste.bo...@gmail.com A: daniele.zambe...@gmail.com; Discussioni generali sul linguaggio Python python@lists.python.it Inviato: Venerdì 15 Giugno 2012 12:56 Oggetto: Re: [Python] Lista dizionari Non è che invece intende una lista di dizionari con 2 chiavi? tabella = [{path:'blabla', cfile:'nomedelfile'}, {path:'blabla', cfile:'nomedelfile'}] Sì, infatti ho riscritto la mail. Walter ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Lista dizionari
Non so se ho capito, ma se hai una lista L = [{path:'path1',cfile:'file1'}, ... , {path:'pathn',cfile:'filen'}] puoi provare una cosa del genere: keypath = '/un/certo/path' [(d[path],d[cfile]) for d in L if d[path] = keypath] Stefano 2012/6/15 Walter Valenti waltervale...@yahoo.it Da: stefano bossi ste.bo...@gmail.com A: daniele.zambe...@gmail.com; Discussioni generali sul linguaggio Python python@lists.python.it Inviato: Venerdì 15 Giugno 2012 12:56 Oggetto: Re: [Python] Lista dizionari Non è che invece intende una lista di dizionari con 2 chiavi? tabella = [{path:'blabla', cfile:'nomedelfile'}, {path:'blabla', cfile:'nomedelfile'}] Sì, infatti ho riscritto la mail. Walter ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Lista dizionari
Non so se ho capito, ma se hai una lista L = [{path:'path1',cfile:'file1'}, ... , {path:'pathn',cfile:'filen'}] puoi provare una cosa del genere: keypath = '/un/certo/path' [(d[path],d[cfile]) for d in L if d[path] = keypath] E' quello che faccio anche io. Itero sul dizionario. Speravo ci fosse un modo diverso (con dizionari grandi e con tanti keypath fa verificare diventa oneroso. In pratica per ogni dizionario della lista verifica che dizio['path'] sia nella lista dei valori da verificare.: for x in lista_valore: if x['path'] in lista_inter: ### resto del codice dove lista_valore è la lista dei dizionari lista_inter è la lista dei valori da verificare Walter ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Lista dizionari
2012/6/15 Walter Valenti waltervale...@yahoo.it E' quello che faccio anche io. Itero sul dizionario. Speravo ci fosse un modo diverso (con dizionari grandi e con tanti keypath fa verificare diventa oneroso. In pratica per ogni dizionario della lista verifica che dizio['path'] sia nella lista dei valori da verificare.: for x in lista_valore: if x['path'] in lista_inter: ### resto del codice dove lista_valore è la lista dei dizionari lista_inter è la lista dei valori da verificare Se vuoi qualcosa di più efficiente ti devi costruire un dizionario inverso durante la costruzione dei dizionari normali, dove le chiavi sono i path e il valore sono la lista di dizionari che li contengono. Il tuo codice seguente: for x in lista_valore: if x['path'] in lista_inter: ### resto del codice Diventerebbe: for x in lista_valore_inverso['path']: ### resto del codice In realtà non sono sicuro di cosa siano lista_valore e lista_inter, ma spero di essermi spiegato. Ciao. Marco. -- http://beri.it/ - Un blog http://beri.it/i-miei-libri/ - Qualche libro ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Lista dizionari
dalle varie letture che ho fatto sembra che il metodo get del diziopnario dict.get('key',False) ...sia più spiccio se devi leggere il valore .. magari aiuta ... ciao Matteo Il 15/06/2012 14:17, Walter Valenti ha scritto: Non so se ho capito, ma se hai una lista L = [{path:'path1',cfile:'file1'}, ... , {path:'pathn',cfile:'filen'}] puoi provare una cosa del genere: keypath = '/un/certo/path' [(d[path],d[cfile]) for d in L if d[path] = keypath] E' quello che faccio anche io. Itero sul dizionario. Speravo ci fosse un modo diverso (con dizionari grandi e con tanti keypath fa verificare diventa oneroso. In pratica per ogni dizionario della lista verifica che dizio['path'] sia nella lista dei valori da verificare.: for x in lista_valore: if x['path'] in lista_inter: ### resto del codice dove lista_valore è la lista dei dizionari lista_inter è la lista dei valori da verificare Walter ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python