• User Newbie

    python

    ciao a tutti sono nuova nel forum e ho iniziato da poco a programmare.

    ho un problema.

    io ho un dizionario e devo sommare i valori che hanno le stesse chiavi.
    come faccio?

    cioè mi spiego meglio.

    'ar' : 78965, 'we' : 456,'fr' : 7843,'ar' : 532, 'uj' : 5467, 'fr' : 4678,'un' : 743,'ar' : 36,....

    quindi devo fare in modo di avere:

    'ar' : 79533,'we' : 456,'fr' : 12521,'uj' : 5467,'un':743,.....

    non posso richiamare ad uno ad uno le chiavi perchè sono tante...

    spero in un aiuto.

    ciao


  • Moderatore

    ma il dizionario è unico?

    se è così non è possibile avere chiavi duplicati, se per esempio hai dic['ar']=78965 e poi assegni ad ar un nuovo valore, per esempio dic['ar']=532, il nuovo valore sostituirà il vecchio

    l'unica possibilità è eseguire le somme in fase di assegnazione

    per esempio

    if 'ar' in dic: dic['ar'] += nuovo_valore
    else: dic['ar'] = valore_iniziale


  • User Newbie

    ti mando il codice:

    def ala(a):
    d={}
    for lettera in seq:
    valore=seq.count(lettera)
    d[lettera]=valore
    return d
    lv2=de.values()
    for seq in de.values(): # per ogni città in una lista di citta

    sw2=ala(lv2)
    

    quindi ho diversi dizionari per ogni seq e devo avere alla fine un unico dizionario che ha per ogni chiave uguale la somma dei valori.

    qualche idea?:(


  • Moderatore
    
    def ala(a):
        d={}
    
        for lettera in seq:
            valore=seq.count(lettera)
            d[lettera]=valore
    
        return d
    
    lv2=de.values()
    for seq in de.values(): # per ogni città in una lista di citta
        sw2=ala(lv2)
    
    

    se ho ben capito il ciclo fuori dalla funzione enumera tutti valori contenuti nel dizionario de e li pone uno alla volta in seq, poi all'interno della funzione ala enumera tutti i caratteri contenuti nella stringa seq e assegna a valore il numero di istanze di lettera presenti nella stringa seq

    a questo punto registra questo valore nel dizionario d

    l'unica modifica da fare è questa

    
        for lettera in seq:
            valore=seq.count(lettera)
            if lettera in d: d[lettera] += valore
            else: d[lettera] = valore
    
    

    in pratica quello che ho fatto è dire se la lettera è presente in d allora devi sommare il valore precedente a quello attuale, altrimenti devi aggiungere lettera a d


  • User Newbie

    praticamente io ho una lista (lv2) di seq.
    nella mia funzione faccio un solo dizionario per ogni sequenza.
    poi applico la funzione a tutte le sequenze così ottengo diversi dizionari che possono avere la stessa chiave.
    facendo come mi hai detto tu mi somma i valori nella stessa sequenza di un solo dizionario. io devo sommare i valoridei diversi dizionari che hanno la chiave comune.


  • Moderatore

    @swem23 said:

    praticamente io ho una lista (lv2) di seq.
    nella mia funzione faccio un solo dizionario per ogni sequenza.
    poi applico la funzione a tutte le sequenze così ottengo diversi dizionari che possono avere la stessa chiave.
    facendo come mi hai detto tu mi somma i valori nella stessa sequenza di un solo dizionario. io devo sommare i valoridei diversi dizionari che hanno la chiave comune.

    ho capito.....

    dunque ogni seq è una stringa esatto? e quando dici di voler sommare i valori che la stessa chiave comune, per chiave intendi le lettere costruite estraendole dalle varie seq?

    se è così basta creare un dizionario globale d definendolo nel corpo centrale del programma....in questo modo man mano che processi le varie seq, i risultati finiranno tutti in un unico dizionario