如何用Python3.10+结构化模式匹配校验单条目字典格式?
更简洁的实现方案
直接利用字典的模式匹配语法结合守卫条件,就能一步完成类型校验和条目数量检查,不需要嵌套匹配或者提前转换列表:
def test(dct: dict[str, float]) -> tuple[str, float]: match dct: case {k: v} if isinstance(k, str) and isinstance(v, float) and len(dct) == 1: return k, v case _: raise ValueError("Expected a single-entry dictionary with string key and float value")
这个写法的核心是:
{k: v}模式直接匹配单条目字典- 后续的
if守卫同时完成三个校验:键是字符串类型、值是浮点类型、字典只有一个条目 - 不符合条件时直接抛出明确的错误信息
如果更倾向于通过条目集合来匹配,也可以用tuple(dct.items())替代列表,写法更紧凑:
def test(dct: dict[str, float]) -> tuple[str, float]: match tuple(dct.items()): case ((k, v),) if isinstance(k, str) and isinstance(v, float): return k, v case _: raise ValueError("Invalid input format")
这里tuple(dct.items())会生成形如((key, value),)的单元素元组,((k, v),)模式直接匹配这种结构,再通过守卫校验类型,逻辑清晰且代码量更少。
内容的提问来源于stack exchange,提问作者Milana
相关产品推荐
相关产品推荐

