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']}
Esto obviamente no es simple intercambio de claves con valores: esto sobrescribiría algunos valores (como nuevas claves) que NO es lo que estoy buscando.smarter "reverse" de un diccionario en python (según algunos valores son los mismos)?
Si 2 o más valores son los mismos para claves diferentes, se supone que las claves se agrupan en una lista.
La función anterior funciona, pero me pregunto si hay una manera más inteligente/más rápida?
Ha sido un tiempo desde que he usado Python, pero tal vez hay algo que podría hacer con 'setdefault()' en el dict , para colapsar las 4 líneas de la instrucción if en 1? – Ken
¿podemos suponer que los valores del diccionario inicial son inmutables (calificar como claves), o podría ser una lista de tales? En otras palabras, ¿quieres que la función sea reversible? Supongo que no, ya que el tuyo no lo es, pero también podría ser un error en la implementación actual. – kriss