[Python] Operazioni sui Dizionari

leonardi_andrea
La domanda sarà sicuramente banale per molti ma non trovo soluzione. Potreste illuminarmi?

Sto cercando di creare un dict() o di aggiungere i duplicati ad uno esistente ma null.
E' possibile che il dizionario non accetti i duplicati?
C'è un modo?

Temporaneamente ho creato due liste : uno dei keys e uno dei values per non perdere le informazioni.

Sul web trovo solo come eliminare i duplicati ma non come aggiungerli.

Ho provato a creare una dict(zip(list_keys, list_values)) ma i duplicati vengono perduti.

Ho provati a creare una dict2[keys]=(values) per poi provare ad aggiungerlo in questo modo al dict precendente : dict(dict1.items() + dict2.items()) ma dict2 perde i duplicati.

Grazie

Risposte
apatriarca
Un dizionario ha per definizione un solo valore per ogni chiave. Come dovrebbe apparire il tuo dizionario dopo l'aggiunta dei duplicati? In linea di massima se vuoi duplicati, un [tt]dict[/tt] NON è la struttura di dati corretta. Quello che puoi fare è forse avere una lista per ogni chiave del dizionario ma per aggiungere i valori dovresti forse fare qualcosa come segue:
from collections import defaultdict
#...
d = defaultdict(list)
for k, v in zip(keys, values):
    d[k].append(v)

La sottoclasse [tt]defaultdict[/tt] di [tt]dict[/tt] chiama una funzione per creare un nuovo valore di default nel caso in cui si cerchi di accedere ad un elemento non presente nel dizionario. Usando [tt]dict[/tt] sarebbe stato necessario scrivere qualcosa come:
d = dict()
for k, v in zip(keys, values):
    if k in d:
        d[k].append(v)
    else:
        d[k] = [v]

leonardi_andrea
Ciao Grazie!

Ho risolto poi con le liste in questo modo:
eBC è un dizionario contenete le keys e i values presi una sola volta
kk è la lista contenente le sole keys con doppioni

for j in kk:
    if j in eBC: 
         k_kk.append(( j, eBC[j] ))
    else: 
         k_kk.append(( j, eBC[(j[1], j[0])] ))            

Volevo capire se ci fosse un modo che non conoscevo o se proprio non si potesse fare :D
Ho trovato diversi tipi di dizionari e poi... ho trovato diverse guide su come eliminare i doppioni o unificare per chiave, per cui mi è sorto il dubbio .
Sono ancora alle prime armi :lol:

Grazie mille per la conferma!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.