python-3.x 用字符串枚举迭代列表

kkih6yb8  于 2023-06-25  发布在  Python
关注(0)|答案(3)|浏览(107)

我有一个

myenum(str, Enum):
   COLORRED = 'colorred'
   COLORBLUE = 'colorblue'

itemList = [<myenum.COLORRED,'colorred'>]

我试图从itemList 'colored'中获取值,但是itemList.value在Python中给出了一个类型检查错误,错误消息是“str has no attribute value”。
list(map(str,myenum))给出了键COLORRED,但我需要值'coloured'。我试过String-based enum in Python,但没有一个对我有效。
我的枚举是由openapi自动生成的。下面是YAML。我收到一个myElements数组,需要myEnum中的一个值。

myElements:
  type: array
  items:
  allOf:
     - $ref: 'myEnum'

myEnum:
  type: String
  enum:
    - 'state1'
    - 'state2'

注意:问题是python中的typecheck没有迭代值。我需要枚举值而不使用。values或。name

7vux5j2d

7vux5j2d1#

看起来您试图使用列表的.value属性,而不是其元素。

from enum import Enum

class Color(Enum):
    RED = "color red"
    BLUE = "color blue"

lst = [Color.RED, Color.BLUE]
expected = ['color red', 'color blue']

# This is equivalent to `list(map(lambda v: v.value, lst))`
values = [item.value for item in lst]
assert values == expected
xytpbqjk

xytpbqjk2#

我不太明白你的意思,但是...
如果你使用的是Python 3.11,你可以使用StrEnum,这样你就可以在不调用.value的情况下获取值。

class Color(StrEnum):
    RED = 'red'
    GREEN = 'green'
    BLUE = 'blue'

print(Color.RED) #=> red

还有IntEnum。

ktca8awb

ktca8awb3#

我相信你所追求的是列表中枚举的值。如果是这样,这可能是你可以使用的东西。

from enum import Enum

class myenum(str, Enum):
    COLORRED = 'colorred'
    COLORBLUE = 'colorblue'

mylist = [x.value for x in myenum]
# where mylist will be ['colorred', 'colorblue']

然而,如果你解释你如何生成你的列表,以及你希望如何使用数据(也许用一个简单的例子),这可能有助于人们更好地理解你的目标。

相关问题