<div dir="ltr">Ciao,<div>ti ringrazio per la domanda. E' un semplice esercizio sui dizionari, faccio la assunzione le chiavi siano tutte lowecase, in caso non lo siano basta una passata iniziale con tolower per renderle lowercase. Le precondizioni sono:</div><div>1. cerchiamo la chiave di ingresso nelle chiavi</div><div>2. cerchiamo la chiave di ingresso nei valori.</div><div>In altri linguaggi si potrebbe pensare a una bimap, una mappa bidirezionale che permette dai valori alle chiavi. Per mia ignoranza non so se esita una cosa simile in Python però...possiamo come risultato finale restituire un dizionario con 1 + 2.</div><div># supponiamo cerco nonno</div><div>key = 'nonno'<br>source = {'nonno':[2,3,4,5], 'mamma':['figlia','nonno']}<br>saved = {}<br># O(1)<br>if keyin source:<br> saved = { key : source[key] }<br># ora ci tocca vede tutto ma lo facciamo con le dictionary comprensions,<br># O(n)<br>dest = { k:v for k, v in source.items() if key in v }</div><div># ora uniamo il saved to the dest, se ci sono duplicati<br># li tratteremo per ora assumiamo che non ci siano duplicati.<br>if saved:<br> dest[key] = saved[key]<br>print(dest)<br></div><div>Questo e' happy path ci sono i duplicati da trattare e diversi casi. Lascio a te la dimostrazione perche lo schermo di questo laptop e' troppo piccolo per contenere i corner case.</div><div>Saluti,</div><div>Giorgio</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Il giorno dom 28 mag 2023 alle ore 19:42 Gabriele Battaglia <<a href="mailto:iz4apu@libero.it">iz4apu@libero.it</a>> ha scritto:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Ciao e grazie in anticipo per il vostro tempo.<br>
<br>
Vi sottopongo una semplice situazione.<br>
<br>
Io so come risolverla, ma vi chiedo se c'è un modo più elegante del mio, <br>
che mi pare bruttino.<br>
<br>
<br>
Non vi propongo del codice, rimaniamo a livello di descrizione, poi se <br>
non ci riesco, magari arrivamo anche a degli esempi di codice.<br>
<br>
<br>
Ho un dizionario. Ci sono tutte le chiavi naturalmente, e i valori sono <br>
lunghe liste che contengono diversi tipi di dati, soprattutto stringhe e <br>
booleani.<br>
<br>
<br>
Ho una chiave di ricerca, una stringa. Devo passarla ad una funzione e <br>
questa mi deve tornare la prima chiave del dizionario se, la parola che <br>
cerco è compresa nella chiave stessa o in uno degli elementi contenuti <br>
nella lista di valori di quella chiave.<br>
<br>
<br>
Esempio, se cerco "nonno", la funzione mi deve tornare sia<br>
<br>
<br>
{'Nonno':[2,3,4,5.....]}<br>
<br>
che anche<br>
<br>
{'mamma':['figlia','nonno',......]}<br>
<br>
<br>
Io faccio<br>
<br>
for k,v in dizionario<br>
<br>
se chiave in k allora trovato uguale vero<br>
<br>
altrimenti trovato uguale falso<br>
<br>
poi... se v è una lista allora<br>
<br>
for indice in lista<br>
<br>
se indice è testo allora<br>
<br>
se chiave in indice trovato uguale vero<br>
<br>
altrimenti trovato uguale falso<br>
<br>
<br>
e indentato dentro al primo for<br>
<br>
se trovato è vero, ritorna indice<br>
<br>
<br>
Più o meno funziona ma, appunto, come vi dicevo, chissà se esiste un <br>
modo più elegante e soprattutto conciso.<br>
<br>
<br>
Se non vi ruba tempo, voi come fareste?<br>
<br>
<br>
Non suggeritemi oggetti che non siano quelli citati, intendo, no <br>
librerie esterne per la gestione di query e DB, devo lavorare con tipi <br>
di dati base.<br>
<br>
<br>
Grazie mille in anticipo.<br>
<br>
<br>
Gabry.<br>
<br>
-- <br>
Gabriele Battaglia (IZ4APU)<br>
--... ...-- -.. . .. --.. ....- .- .--. ..- - ..- . .<br>
Sent from my Giant Desktop PC<br>
<br>
_______________________________________________<br>
Python mailing list<br>
<a href="mailto:Python@lists.python.it" target="_blank">Python@lists.python.it</a><br>
<a href="https://lists.python.it/mailman/listinfo/python" rel="noreferrer" target="_blank">https://lists.python.it/mailman/listinfo/python</a><br>
</blockquote></div><br clear="all"><div><br></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr">Life is a chess game - Anonymous.<br></div></div>