[pyar] Lista de diccionarios, eliminar duplicados

marcos hipe marcoshipe en gmail.com
Lun Mar 19 19:00:58 -03 2018


Estoy con Juaquín y con Francisco
aunque tambien puede haber otra solucion que te pueda servir, dependiendo
de las caracteristicas de la informacion que tengas y es comparar todos los
diccionarios de la lista (con el ==) y eliminar uno de los 2 cuando sean
iguales
por lo que lei, el == en diccionarios, primero compara la longitud de estos
y despues va comparando elemento a elemento, cuando uno de los elementos da
distinto (ya sea en la clave o el valor) devuelve False.
Si comparamos las dos formas, esta que propongo es O(n^2) mientras que la
otra es O(n), pero no tiene la necesidad de clonar toda la informacion para
ponerla en lista de tuplas por ejemplo. Asi que creo que seria mas
eficiente solo si hablamos de una lista de pocos diccionarios, cada
diccionario tiene muchos elementos y los diccionarios son generalmente
distintos

El 19 de marzo de 2018, 18:00, Francisco Couzo <franciscouzo en gmail.com>
escribió:

> Bruno, obviamente eso no va a funcionar porque los diccionarios no son
> hasheables.
>
> Willians, lo que podés hacer es convertir todos los diccionarios a tuplas
> con tuple(sorted(d.items())), y después de eso vas a podés meterlos en un
> set.
>
> 2018-03-19 17:48 GMT-03:00 Bruno Geninatti <brunogeninatti en gmail.com>:
>
>> Hola Willians. ¿Por que no usas sets[1] en lugar de lists[2]?
>>
>> Saludos
>>
>> [1] https://docs.python.org/3.5/library/stdtypes.html?highlight=set#set
>> [2] https://docs.python.org/3.5/library/stdtypes.html?highlight=list#list
>>
>> El 19 de marzo de 2018, 17:42, Willians Vivanco <williansvi en gmail.com>
>> escribió:
>>
>>> Hola,
>>>
>>> Como indico en el enunciado necesito eliminar los diccionarios
>>> duplicados de una lista... Todos los métodos tradicionales me devuelven un *TypeError:
>>> unhashable type: 'dict'* por ahí existe alguna manera dirty, pero ando
>>> buscando algo lo más pythonic posible.
>>>
>>> Un ejemplo de la lista de marras puede ser:
>>>
>>> [{'guid': 'com.empresa.HAProxy', 'duration': 60, 'metrics':
>>> {'Component/qtime/BACKEND': 0, 'Component/qtime/servidor-10': 0,
>>> 'Component/ctime/BACKEND': 0, 'Component/rtime/servidor-10': 0,
>>> 'Component/rtime/BACKEND': 0, 'Component/ctime/servidor-10': 0}, 'name':
>>> 'servicio1-be'},
>>> {'guid': 'com.empresa.HAProxy', 'duration': 60, 'metrics':
>>> {'Component/qtime/BACKEND': 0, 'Component/qtime/servidor-10': 0,
>>> 'Component/ctime/BACKEND': 0, 'Component/rtime/servidor-10': 0,
>>> 'Component/rtime/BACKEND': 0, 'Component/ctime/servidor-10': 0}, 'name':
>>> 'servicio1-be'},
>>>  {'guid': 'com.empresa.HAProxy', 'duration': 60, 'metrics':
>>> {'Component/qtime/BACKEND': 0, 'Component/qtime/servidor-11': 0,
>>> 'Component/qtime/servidor-10': 0, 'Component/ctime/BACKEND': 1,
>>> 'Component/ctime/servidor-11': 2, 'Component/rtime/servidor-10': 3554,
>>> 'Component/rtime/servidor-11': 3640, 'Component/rtime/BACKEND': 3549,
>>> 'Component/ctime/servidor-10': 0}, 'name': 'servicio2-be'},
>>>  {'guid': 'com.empresa.HAProxy', 'duration': 60, 'metrics':
>>> {'Component/qtime/BACKEND': 0, 'Component/qtime/servidor-10': 0,
>>> 'Component/ctime/BACKEND': 0, 'Component/rtime/servidor-10': 0,
>>> 'Component/rtime/BACKEND': 0, 'Component/ctime/servidor-10': 0}, 'name':
>>> 'servicio1-be'}]
>>>
>>>
>>> Y lo que ando buscando es que me quede solo:
>>>
>>>
>>> [{'guid': 'com.empresa.HAProxy', 'duration': 60, 'metrics':
>>> {'Component/qtime/BACKEND': 0, 'Component/qtime/servidor-11': 0,
>>> 'Component/qtime/servidor-10': 0, 'Component/ctime/BACKEND': 1,
>>> 'Component/ctime/servidor-11': 2, 'Component/rtime/servidor-10': 3554,
>>> 'Component/rtime/servidor-11': 3640, 'Component/rtime/BACKEND': 3549,
>>> 'Component/ctime/servidor-10': 0}, 'name': 'servicio2-be'},
>>>  {'guid': 'com.empresa.HAProxy', 'duration': 60, 'metrics':
>>> {'Component/qtime/BACKEND': 0, 'Component/qtime/servidor-10': 0,
>>> 'Component/ctime/BACKEND': 0, 'Component/rtime/servidor-10': 0,
>>> 'Component/rtime/BACKEND': 0, 'Component/ctime/servidor-10': 0}, 'name':
>>> 'servicio1-be'}]
>>>
>>>
>>>
>>> Alguna sugerencia?
>>>
>>> Agradecido de antemano,
>>>
>>> --
>>> Willians Vivanco
>>> https://ar.linkedin.com/in/williansvi
>>>
>>> _______________________________________________
>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>> Sitio web: http://www.python.org.ar/
>>>
>>> Para administrar la lista (o desuscribirse) entrar a
>>> http://listas.python.org.ar/listinfo/pyar
>>>
>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>> Argentina - http://www.usla.org.ar
>>>
>>
>>
>> _______________________________________________
>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>> Sitio web: http://www.python.org.ar/
>>
>> Para administrar la lista (o desuscribirse) entrar a
>> http://listas.python.org.ar/listinfo/pyar
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>>
>
>
> _______________________________________________
> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
> Sitio web: http://www.python.org.ar/
>
> Para administrar la lista (o desuscribirse) entrar a
> http://listas.python.org.ar/listinfo/pyar
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20180319/30af9409/attachment.html>


Más información sobre la lista de distribución pyar