def revert_dict(d):
rd = {}
for key in d:
val = d[key]
if val in rd:
rd[val].append(key)
else:
rd[val] = [key]
return rd
>>> revert_dict({'srvc3': '1', 'srvc2': '1', 'srvc1': '2'})
{'1': ['srvc3', 'srvc2'], '2': ['srvc1']}
Questo ovviamente non è semplice scambio di chiavi con valori: questo sovrascriverebbe alcuni valori (come nuove chiavi) che NON è quello che sto cercando."reverse" più intelligente di un dizionario in python (acc per alcuni dei valori uguali)?
Se 2 o più valori sono uguali per chiavi diverse, è necessario raggruppare i tasti in un elenco.
La funzione precedente funziona, ma mi chiedo se esiste un modo più intelligente/più veloce?
E 'stato un po' che ho usato Python, ma forse c'è qualcosa che si potrebbe fare con 'setDefault()' sul dict , per comprimere le 4 righe dell'istruzione if in 1? – Ken
possiamo supporre che i valori del dizionario iniziale siano immutabili (qualificati come chiavi), o potrebbe essere un elenco di tali? In altre parole, vuoi che la funzione sia inversibile? Immagino di no, come il tuo non lo è, ma potrebbe anche essere un bug all'attuale implementazione. – kriss