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