Python | Agrupar claves de diccionario por valor

Mientras realizamos cálculos sobre el diccionario, podemos encontrarnos con un problema en el que podríamos tener que realizar la tarea de agrupar claves según el valor, es decir, crear una lista de claves, su valor. Esto puede ser diferente en casos de organización de datos en caso de aprendizaje automático. Vamos a discutir cierta forma en que se puede realizar esta tarea.
Método: Usar sorted() + items() + defaultdict() 
Esta tarea se puede realizar combinando las tareas que se pueden realizar con las funciones anteriores. El defaultdict() se usa para crear un diccionario inicializado con listas, items() obtiene el par clave-valor y sorted() ayuda a la agrupación.
 

Python3

# Python3 code to demonstrate working of
# Grouping dictionary keys by value
# Using sorted() + items() + defaultdict()
from collections import defaultdict
 
# Initialize dictionary
test_dict = {'gfg' : 1, 'is' : 2, 'best' : 1, 'for' : 3, 'CS' : 2}
 
# printing original dictionary
print("The original dictionary : " +  str(test_dict))
 
# Using sorted() + items() + defaultdict()
# Grouping dictionary keys by value
res = defaultdict(list)
for key, val in sorted(test_dict.items()):
    res[val].append(key)
     
# printing result
print("Grouped dictionary is : " + str(dict(res)))

Producción:

The original dictionary : {'gfg': 1, 'is': 2, 'best': 1, 'for': 3, 'CS': 2}
Grouped dictionary is : {2: ['CS', 'is'], 1: ['best', 'gfg'], 3: ['for']}

Método 2:

Además, esta tarea también se puede realizar sin utilizar ningún módulo. 
Entonces, la lógica aquí es: 
podemos verificar si las claves están presentes o no 
1. No, entonces podemos crear la clave res [v] = [i] 
2. Sí, podemos agregar valor en la clave res [v] + [ i] 
 

Python3

d_input = {'Input.txt': 'Randy', 'Code.py': 'Stan', 'Output.txt': 'Randy'}
res = {}
for i, v in d_input.items():
    res[v] = [i] if v not in res.keys() else res[v] + [i]
print(res)

Producción:

{'Randy': ['Input.txt', 'Output.txt'], 'Stan': ['Code.py']}

Publicación traducida automáticamente

Artículo escrito por manjeet_04 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *