我使用Enum4库创建一个枚举类如下:

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

我想把[1,2]作为一个列表打印出来。我怎样才能做到这一点呢?


当前回答

只使用:

[e.value for e in Color]

生产:

[1, 2]

要获得名称,请使用:

[e.name for e in Color]

生产:

(“红”、“蓝”)

其他回答

给定一个基于标准python3 enum /IntEnum类的枚举:

from enum import IntEnum

class LogLevel(IntEnum):
    DEBUG = 0
    INFO = 1
    WARNING = 2
    ERROR = 3

可以执行以下操作来获取枚举常量列表:

>>> print(list(LogLevel))
[<LogLevel.DEBUG: 0>, <LogLevel.INFO: 1>, <LogLevel.WARNING: 2>, <LogLevel.ERROR: 3>]

我发现使用枚举常量比使用int型更有表现力。如果枚举从IntEnum继承,则所有枚举常量也是int型,并且可以在任何地方使用:

>>> level = LogLevel.DEBUG

>>> level == 0
True

>>> level == 1
False

>>> level == LogLevel.INFO
False

>>> level == LogLevel.DEBUG
True

>>> "%d" % level
'0'

>>> "%s" % level
'LogLevel.DEBUG'

enum类。Enum是一个解决所有枚举需求的类,因此您只需要继承它,并添加自己的字段。然后从那时起,你所需要做的就是调用它的属性:name & value:

from enum import Enum

class Letter(Enum):
   A = 1
   B = 2
   C = 3

print({i.name: i.value for i in Letter})
# prints {'A': 1, 'B': 2, 'C': 3}

一种方法是获取_value2member_map_属性的键值:

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

list(Color._value2member_map_.keys())
# [1, 2]

只使用:

[e.value for e in Color]

生产:

[1, 2]

要获得名称,请使用:

[e.name for e in Color]

生产:

(“红”、“蓝”)

使用_member_names_快速简单的结果,如果它只是名称,即。

Color._member_names_

还有_member_map_,它返回元素的有序字典。这个函数返回一个集合。OrderedDict,因此您可以使用color . _member_map_items()和color . _member_map_values()。如。

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

将返回颜色的所有有效值