Python: concatena todas las claves que tienen valores similares

Dado un diccionario con claves de string y conjuntos como valores, la tarea es escribir un programa de Python para concatenar claves, todas las cuales tienen un orden de valores similar independientemente.

Entrada: test_dict = {‘gfg’: {5, 4, 3}, ‘es’: {4, 3, 5}, ‘mejor’: {1, 4, 3}, ‘para’: {1, 3, 4}, ‘geeks’: {1, 2, 3}}

Salida: {‘gfg-is’: conjunto congelado ({3, 4, 5}), ‘mejor para’: conjunto congelado ({1, 3, 4}), ‘geeks’: conjunto congelado ({1, 2, 3} )}

Explicación: las claves de conjunto similares están concatenadas, {5, 4, 3} == {4, 3, 5}, por lo tanto, gfg-is están concatenadas.

Entrada: test_dict = {‘gfg’: {5, 4, 3}, ‘es’: {4, 3, 5}, ‘geeks’: {1, 2, 3}}

Salida: {‘gfg-is’: conjunto congelado ({3, 4, 5}), ‘geeks’: conjunto congelado ({1, 2, 3})}

Explicación: las claves de conjunto similares están concatenadas, {5, 4, 3} == {4, 3, 5}, por lo tanto, gfg-is están concatenadas.

Método #1: Usando defaultdict() + join() 

En esto, realizamos la tarea de codificar cada conjunto y agregar las claves correspondientes usando defaultdict(). El siguiente paso es unir todas las claves hash a valores establecidos similares. 

Python3

# Python3 code to demonstrate working of
# Concatenate similar set keys in Dictionary
# Using defaultdict() + join()
from collections import defaultdict
 
# initializing dictionary
test_dict = {'gfg': {5, 4, 3}, 'is': {4, 3, 5}, 'best': {
    1, 4, 3}, 'for': {1, 3, 4}, 'geeks': {1, 2, 3}}
 
# printing original dictionary
print("The original dictionary is : " + str(test_dict))
 
hash_vals = defaultdict(list)
for key, val in test_dict.items():
 
    # values are hashed using frozenset
    hash_vals[frozenset(val)].append(key)
 
# perform joining
res = {'-'.join(keys): vals for (vals, keys) in hash_vals.items()}
 
# printing result
print("The concatenated keys : " + str(res))

Producción:

El diccionario original es: {‘gfg’: {3, 4, 5}, ‘is’: {3, 4, 5}, ‘best’: {1, 3, 4}, ‘for’: {1, 3 , 4}, ‘geeks’: {1, 2, 3}}

Las claves concatenadas: {‘gfg-is’: frozenset({3, 4, 5}), ‘best-for’: frozenset({1, 3, 4}), ‘geeks’: frozenset({1, 2, 3})}

Método #2: Usando groupby() + join() + comprensión de diccionario

En esto, realizamos tareas de agrupar elementos similares usando groupby(). Después de eso, la unión de claves de valor similar se realiza mediante join(). 

Python3

# Python3 code to demonstrate working of
# Concatenate similar set keys in Dictionary
# Using groupby() + join() + dictionary comprehension
from itertools import groupby
 
# initializing dictionary
test_dict = {'gfg': {5, 4, 3}, 'is': {4, 3, 5},
             'best': {1, 4, 3}, 'for': {1, 3, 4},
             'geeks': {1, 2, 3}}
 
# printing original dictionary
print("The original dictionary is : " + str(test_dict))
 
# elements grouped using groupby()
# dictionary comprehension provides shorthand to perform grouping
res = {'-'.join(val): key for key, val in groupby(
  sorted(test_dict, key=test_dict.get), key=lambda sub: test_dict[sub])}
 
# printing result
print("The concatenated keys : " + str(res))

Producción:

El diccionario original es: {‘gfg’: {3, 4, 5}, ‘is’: {3, 4, 5}, ‘best’: {1, 3, 4}, ‘for’: {1, 3 , 4}, ‘geeks’: {1, 2, 3}}

Las claves concatenadas: {‘gfg-is’: {3, 4, 5}, ‘best-for’: {1, 3, 4}, ‘geeks’: {1, 2, 3}}

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 *