Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175

    [Python] Lista ordinata chiave:valore

    Allora ho una struttura di questo tipo
    >>> diz = {'mar':'5', 'val':'15', 'aug':'3'}
    io vorrei avere come output
    {'val':'15', 'mar':'5', 'aug':'3'}
    quindi ordinare il tutto secondo il valore in modo discendente.

    Il dizionario sembrava la soluzione più adatta, ma a quanto purtroppo ho capito questi non si possono ordinare mantenendo la corrispondenza (nn posso quindi ottenere un qualcosa come postato nel 2° QUOTE).

    A quanto ho capito posso ordinare o solo le chiavi o solo i valori;
    ordina secondo le chiavi:
    >>> diz = {'mar':'5', 'val':'15', 'aug':'3'}
    >>> k = diz.keys()
    >>> k.sort()
    >>> k
    ['aug','mar','val']
    ordina secondo i valori:
    >>> diz = {'mar':'5', 'val':'15', 'aug':'3'}
    >>> k = diz.values()
    >>> k.sort()
    >>> k
    ['3,'5,'15']
    Ma come fare ad avere questo:
    {'val':'15', 'mar':'5', 'aug':'3'}
    ???

    Cosa devo usare al posto dei dizionari???
    Grazie dell'aiuto e ciao a tutti

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    nessuno si occupa di python qui?
    UP

  3. #3
    Utente di HTML.it L'avatar di chris
    Registrato dal
    Sep 1999
    Messaggi
    1,568
    in teoria questo codice fa quello che vuoi, ma in pratica, mi sa che i dizionari vengono ordinati secondo interni...
    io userei una lista di tuple.

    def OrdinaDiz2(diz, debug = 0):
    if(debug):
    print diz
    diz2 = {}
    b = diz.items()
    if(debug):
    print b
    b.sort(lambda a,b:int(b[1])-int(a[1]))
    if(debug):
    print b
    for i in b:
    diz2[i[0]] = i[1]
    if(debug):
    print i, i[0], i[1]
    print diz2
    return diz2

    OrdinaDiz2({'val':'15', 'mar':'5', 'aug':'3', 'cavolo':'852', 'scemo':'0'}, 1)

    ########## Output ##############
    {'cavolo': '852', 'mar': '5', 'aug': '3', 'val': '15', 'scemo': '0'}
    [('cavolo', '852'), ('mar', '5'), ('aug', '3'), ('val', '15'), ('scemo', '0')]
    [('cavolo', '852'), ('val', '15'), ('mar', '5'), ('aug', '3'), ('scemo', '0')]
    ('cavolo', '852') cavolo 852
    ('val', '15') val 15
    ('mar', '5') mar 5
    ('aug', '3') aug 3
    ('scemo', '0') scemo 0
    {'cavolo': '852', 'mar': '5', 'aug': '3', 'val': '15', 'scemo': '0'}
    {'cavolo': '852', 'mar': '5', 'aug': '3', 'val': '15', 'scemo': '0'}
    "Nei prossimi tre anni col mio governo vogliamo vincere anche il cancro, che colpisce ogni anno 250.000 italiani e riguarda quasi due milioni di nostri concittadini"

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2002
    Messaggi
    138

    Re: [Python] Lista ordinata chiave:valore

    Originariamente inviato da Metallica

    Ma come fare ad avere questo:
    codice:
    {'val':'15', 'mar':'5', 'aug':'3'}
    codice:
    
    
    mmm...
    AFAIK i dizionari si possono ordinare per chiavi e non per valori

    cmq se non ti cambia nulla fare:
    codice:
    {15:'val,5:'mar',3:'aug'}
    (occhio: i 15 5 e 3 nn sono stringhe ma interi)

    puoi fare:
    codice:
    #dizionario di partenza non ordinato:
    diz_partenza = {5:'mar',3:'aug',15:'val'} 
    
    #prendo le chiavi:
    k = diz_partenza.keys()
    
    #le metto in ordine decrescente:
    k.reverse() 
    
    #creo un diz vuoto:
    diz_ordinato = {} 
    
    #metto nel nuovo dizionario le chiavi in ordine e i
    #rispettivi valori, uguali a quelli del dizionario di partenza:
    for i in k: diz_ordinato[i] = diz_partenza[i]
    a meno che non vi sia una a me sconosciuta funzione per invertire le chiavi con i valori

    ciao

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    grazie ragazzi ora valuto proprio la situazione e vi farò sapere

    cmq python è una figata sto usando un programma con tanto di sintassi colorata e indentazione automatica e il codice che ne dieriva è na figata

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2002
    Messaggi
    138
    Originariamente inviato da Metallica
    sto usando un programma con tanto di sintassi colorata e indentazione automatica e il codice che ne dieriva è na figata
    questo lo fa anche l'editor che sta insieme all'interprete interattivo

    cmq volevo postare la funzione per invertire chiavi/valori...

    codice:
    def diz_inverti(d):
    	k = d.keys()
    	v = d.values()
    	d2 = {}
    	for i in range(len(d)):
    		d2[v[i]] = k[i]
    	return d2
    ...che si aggancia al codice che ho postato prima

    buon divertimento con il serpentello

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.