¿Cómo obtener todos los valores de la clase de enumeración de Python?

Resuelto user1159517 asked hace 9 años • 17 respuestas

Estoy usando la biblioteca Enum4 para crear una clase de enumeración de la siguiente manera:

class Color(Enum):
    RED = 1
    BLUE = 2

Quiero imprimir [1, 2]como una lista en alguna parte. ¿Cómo puedo conseguir esto?

user1159517 avatar Apr 08 '15 06:04 user1159517
Aceptado

Puedes hacer lo siguiente:

[e.value for e in Color]
Ozgur Vatansever avatar Apr 07 '2015 23:04 Ozgur Vatansever

Basado en la respuesta de @Jeff, refactorizada para usar a classmethodpara que puedas reutilizar el mismo código para cualquiera de tus enumeraciones:

from enum import Enum

class ExtendedEnum(Enum):

    @classmethod
    def list(cls):
        return list(map(lambda c: c.value, cls))

class OperationType(ExtendedEnum):
    CREATE = 'CREATE'
    STATUS = 'STATUS'
    EXPAND = 'EXPAND'
    DELETE = 'DELETE'

print(OperationType.list())

Produce:

['CREATE', 'STATUS', 'EXPAND', 'DELETE']
blueFast avatar Feb 28 '2019 05:02 blueFast

Úselo _member_names_para obtener un resultado fácil y rápido si son solo los nombres, es decir

Color._member_names_

Además, tienes _member_map_que devuelve un diccionario ordenado de los elementos. Esta función devuelve un collections.OrderedDict, por lo que tienes Color._member_map_.items()y Color._member_map_.values()para jugar. P.ej

return list(map(lambda x: x.value, Color._member_map_.values()))

devolverá todos los valores válidos de Color

EliuX avatar Mar 19 '2020 18:03 EliuX

Puedes usar IntEnum :

from enum import IntEnum

class Color(IntEnum):
   RED = 1
   BLUE = 2


print(int(Color.RED))   # prints 1

Para obtener la lista de entradas:

enum_list = list(map(int, Color))
print(enum_list) # prints [1, 2]
Marcin avatar Apr 07 '2015 23:04 Marcin