Python | Encuentra claves con valores duplicados en el diccionario

Dado un diccionario, la tarea es encontrar claves con valores duplicados. Vamos a discutir algunos métodos para el mismo.

Método n.º 1: Uso del enfoque Naive
En este método primero, convertimos los valores del diccionario en claves con el mapeo inverso y luego encontramos las claves duplicadas

# Python code to demonstrate 
# finding duplicate values from a dictionary
  
# initialising dictionary
ini_dict = {'a':1, 'b':2, 'c':3, 'd':2}
  
# printing initial_dictionary
print("initial_dictionary", str(ini_dict))
  
# finding duplicate values
# from dictionary
# using a naive approach
rev_dict = {}
  
for key, value in ini_dict.items():
    rev_dict.setdefault(value, set()).add(key)
      
result = [key for key, values in rev_dict.items()
                              if len(values) > 1]
  
# printing result
print("duplicate values", str(result))
Producción:

initial_dictionary {'c': 3, 'b': 2, 'd': 2, 'a': 1}
duplicate values [2]

 
Método n.º 2: usar el diccionario de volteo

# Python code to demonstrate 
# finding duplicate values from dictionary
  
# initialising dictionary
ini_dict = {'a':1, 'b':2, 'c':3, 'd':2}
  
# printing initial_dictionary
print("initial_dictionary", str(ini_dict))
  
# finding duplicate values
# from dictionary using flip
flipped = {}
  
for key, value in ini_dict.items():
    if value not in flipped:
        flipped[value] = [key]
    else:
        flipped[value].append(key)
  
# printing result
print("final_dictionary", str(flipped))
Producción:

initial_dictionary {'a': 1, 'c': 3, 'd': 2, 'b': 2}
final_dictionary {1: ['a'], 2: ['d', 'b'], 3: ['c']}

 
Método #3: Usar string y juego

Suponga que necesita encontrar claves que tengan valores duplicados.

# Python code to demonstrate 
# finding duplicate values from dictionary
from itertools import chain
  
# initialising dictionary
ini_dict = {'a':1, 'b':2, 'c':3, 'd':2}
  
# printing initial_dictionary
print("initial_dictionary", str(ini_dict))
  
# finding duplicate values
# from dictionary using set
rev_dict = {}
for key, value in ini_dict.items():
    rev_dict.setdefault(value, set()).add(key)
  
  
result = set(chain.from_iterable(
         values for key, values in rev_dict.items()
         if len(values) > 1))
  
# printing result
print("resultant key", str(result))
Producción:

initial_dictionary {'b': 2, 'd': 2, 'c': 3, 'a': 1}
resultant key {'d', 'b'}

En vez de

result = set(chain.from_iterable(
         values for key, values in rev_dict.items()
         if len(values) > 1))

Utilizar este:

result = filter(lambda x: len(x)>1, rev_dict.values())
print(list(result))

Publicación traducida automáticamente

Artículo escrito por garg_ak0109 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 *