A partir de dos diccionarios diferentes:

dict_a = {'a': 1, 'b': 3, 'c': 4, 'd': 4, 'e': 6}
dict_b = {'d': 1, 'e': 6, 'a': 3, 'v': 7}

¿Cómo puedo obtener los valores comunes incluso si tienen claves diferentes? Teniendo en cuenta los diccionarios anteriores, me gustaría tener esta salida:

common = [1, 3, 6]
4
mgri 14 ene. 2017 a las 01:37

3 respuestas

La mejor respuesta

Crear conjuntos a partir de los valores:

list(set(dict_a.values()) & set(dict_b.values()))

Esto crea una intersección de los valores únicos en cualquier diccionario:

>>> dict_a = {'a': 1, 'b': 3, 'c': 4, 'd': 4, 'e': 6}
>>> dict_b = {'d': 1, 'e': 6, 'a': 3, 'v': 7}
>>> list(set(dict_a.values()) & set(dict_b.values()))
[1, 3, 6]

Desafortunadamente, no podemos usar vistas del diccionario aquí (que puede actuar como conjuntos), porque no se requiere que los valores del diccionario sean únicos. Si hubiera pedido solo las claves, o los pares clave-valor, las llamadas set() no hubieran sido necesarias.

6
Martijn Pieters 13 ene. 2017 a las 22:40

La expresión de intersección & requiere 2 conjuntos, pero la contraparte del método puede funcionar con cualquier iterable, como dict.values. Así que aquí hay otra versión de la solución Martijn Pieters:

list(set(dict_a.values()).intersection(dict_b.values()))

Mis 2 centavos :)

2
Bertrand C. 14 ene. 2017 a las 18:25

Prueba esto,

commom = [item for item in dict_b.values() if item in dict_a.values()]
4
Rahul K P 13 ene. 2017 a las 22:42