[Python] Operazioni sui Dizionari

Messaggioda Andrealeo92 » 01/12/2020, 20:50

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
Andrealeo92
Starting Member
Starting Member
 
Messaggio: 6 di 14
Iscritto il: 15/01/2021, 19:31

Re: [Python] Operazioni sui Dizionari

Messaggioda apatriarca » 03/12/2020, 10:41

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 dict 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:
Codice:
from collections import defaultdict
#...
d = defaultdict(list)
for k, v in zip(keys, values):
    d[k].append(v)

La sottoclasse defaultdict di dict 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 dict sarebbe stato necessario scrivere qualcosa come:
Codice:
d = dict()
for k, v in zip(keys, values):
    if k in d:
        d[k].append(v)
    else:
        d[k] = [v]
apatriarca
Moderatore
Moderatore
 
Messaggio: 5517 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: [Python] Operazioni sui Dizionari

Messaggioda Andrealeo92 » 03/12/2020, 15:11

Ciao Grazie!

Ho risolto poi con le liste in questo modo:
Codice:
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!
Andrealeo92
Starting Member
Starting Member
 
Messaggio: 7 di 14
Iscritto il: 15/01/2021, 19:31


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite