Estoy portando un programa C++ a Python. Hay algunos lugares donde usa std::set
para almacenar objetos que definen sus propios operadores de comparación. Desde la biblioteca estándar Python no tiene equivalente de std::set
(una estructura de datos de mapeo clave-valor ordenada) I intentado usar un diccionario normal y luego la clasificación que cuando se repite, como este:Python equivalente a std :: set y std :: multimap
def __iter__(self):
items = self._data.items()
items.sort()
return iter(items)
Sin embargo, el perfil ha demostrado que todos las llamadas de .sort()
a __cmp__
son un serio cuello de botella. Necesito una mejor estructura de datos, esencialmente un diccionario ordenado. ¿Alguien sabe de una implementación existente? En su defecto, ¿alguna recomendación sobre cómo debo implementar esto? El rendimiento de lectura es más importante que el rendimiento de escritura y el tiempo es más importante que la memoria.
Puntos de bonificación si admite varios valores por clave, como C++ std::multimap
.
Tenga en cuenta que la clase OrderedDict
no se ajusta a mis necesidades, porque devuelve los elementos en el orden de inserción, mientras que los necesito ordenados usando sus métodos __cmp__
.
Si bien no responder directamente a la pregunta acerca de las estructuras de datos esto sin duda ha ayudado a mejorar el rendimiento. +1 – EMP