提示:注意使用格式化与不使用的区别
目录
a, 自定义枚举类继承自IntEnum( StrEnum也一样)
假设自定义枚举类为LeEnum:
class LeEnum(IntEnum):
A = 0
B = 1
1,判断key是否存在(获取所有key列表)
if key in LeEnum.__members__:
pass
2,判断值是否存在(获取所有值列表)
a, 自定义枚举类继承自IntEnum( StrEnum也一样)
vals = list(map(int, LeEnum)) # 此时vals就是所有值列表
如果值都是字符串,则可以继承StrEnum,通过vals = list(map(str, LeEnum)) 来拿到所有值列表
即:if xxx in vals:
b, 自定义枚举类继承自Enum
如果硬要不区分类型而直接继承Enum,则可以直接遍历获取所有值列表:
for val in LeEnum:
if val==1:
c,取出所有value进行判断(通用)
if xxx in LeEnum.__members__.values()
3,通过key名称获取value(映射关系)
方法1
if key in LeEnum.__members__:
val = LeEnum.__members__[key]
方法2
val = '{}'.format(LeEnum[key])
或
val ='%d' %(LeEnum[key])
方法3
LeEnum.__members__.get(key)
4,同时获取key和value(映射关系)
kv0 = LeEnum.__members__.items()
for k,v in kv0:
print(k,'{}'.format(v))
代码最佳实践
from enum import IntEnum
class LeEnum(IntEnum):
A = 0
B = 1
if __name__ == '__main__':
key = "A"
v0 = LeEnum[key]
print(v0) # no
v1='%d' %(LeEnum[key])
print(v1)
v2 = '{}'.format(LeEnum[key])
print(v2)
print("A's val: {}".format(LeEnum[key])) # 通过枚举的key取value,注意使用格式化和直接获取LeEnum[key]的区别
# 直接获取value列表
print("-----get vals0-----")
vals0 = list(map(int, LeEnum))
print("vals0: {}".format(vals0))
print("vals0[1]: {}".format(vals0[1]))
print(vals0[1])
# 获取value列表
print("-----get vals1-----")
vals1 = LeEnum.__members__.values()
if 1 in vals1:
print("$$$$$")
for v in vals1:
print('{}'.format(v))
# 获取key列表
print("-----get keys-----")
keys0 = LeEnum.__members__.keys()
for k in keys0:
print(k)
# 获取key和value
print("-----get kv0-----")
kv0 = LeEnum.__members__.items()
for k,v in kv0:
print(k,'{}'.format(v))
# 通过枚举的key取value
print("-----get v by k-----")
if key in LeEnum.__members__:
print("yeah, value:{}, all members:{}, type:{}".format(LeEnum.__members__[key],LeEnum.__members__, type(LeEnum.__members__)))
v3 = LeEnum.__members__.get(key)
print("v3: {}".format(v3))
print("-----for LeEnum-----")
for v in LeEnum:
print("v: {}".format(v))
speed running:
LeEnum.A
0
0
A's val: 0
-----get vals0-----
vals0: [0, 1]
vals0[1]: 1
1
-----get vals1-----
$$$$$
0
1
-----get keys-----
A
B
-----get kv0-----
A 0
B 1
-----get v by k-----
yeah, value:0, all members:OrderedDict([('A', <LeEnum.A: 0>), ('B', <LeEnum.B: 1>)]), type:<class 'mappingproxy'>
v3: 0
-----for LeEnum-----
v: 0
v: 1
如有帮助,可以留下足迹,再会!