[英]"key error" when using an enum as a dictionary key in Python3
我想使用枚举作为字典的键,但得到一个 KeyError。
#!/usr/bin/python3
from enum import Enum, unique
from typing import List
@unique
class Color(Enum):
RED = "cherry"
GREEN = "cucumber"
BLUE = "blueberry"
allColors = {}
def countColors(colors: List[Color]):
for c in colors:
allColors[c] += 1
countColors([Color.RED, Color.RED, Color.BLUE, Color.GREEN])
for c in allColors:
print(f"""{allColors[c]} {c.value} {c.name} pipes""")
当我运行这个时,我得到
Traceback (most recent call last):
File "mvce.py", line 18, in <module>
countColors([Color.RED, Color.RED, Color.BLUE, Color.GREEN])
File "mvce.py", line 16, in countColors
allColors[c] += 1
KeyError: <Color.RED: 'cherry'>
字典文档说我可以使用任何不可变值作为键,并且我假设枚举值是不可变的。
如何使用枚举作为字典中的键?
我认为这是失败的原因有两点:
为此,您必须检查字典是否有密钥,如果没有,则更新项目
allColors[c]
这样的枚举项的访问使用枚举的__get_item__
方法。https://docs.python.org/3/library/enum.html#enum.EnumType.__getitem_ _
当您尝试访问时,变量 c 是 Color 的一个实例,但该方法期望与枚举成员的名称相匹配。
改变这一行
print(f"""{allColors[c]} {c.value} {c.name} pipes""")
到
print(f"""{allColors[c.name]} {c.value} {c.name} pipes""")
这就是我最后所拥有的:
from enum import Enum, unique
from typing import List
@unique
class Color(Enum):
RED = "cherry"
GREEN = "cucumber"
BLUE = "blueberry"
allColors = dict()
def countColors(colors: List[Color]):
for c in colors:
if c in allColors.keys():
allColors[c] += 1
else:
allColors.update({c:1})
countColors([Color.RED, Color.RED, Color.BLUE, Color.GREEN])
for c in allColors:
print(f"""{allColors[c]} {c.value} {c.name} pipes""")
难道是你设置了 3 colors 但在第 18 行你有 4
countColors([Color.RED, Color.RED, Color.BLUE, Color.GREEN])
尝试
countColors ([Color.RED, Color.Blue, Color.Green])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.