Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 加载YAML文件后添加类型提示的正确方法是什么?_Python_Python 3.x_Typing - Fatal编程技术网

Python 加载YAML文件后添加类型提示的正确方法是什么?

Python 加载YAML文件后添加类型提示的正确方法是什么?,python,python-3.x,typing,Python,Python 3.x,Typing,我正在向Python代码中添加类型提示,并且想知道在加载的YAML文件中键入提示的正确方法是什么,因为它是一个包含任意数量字典的字典 有没有比Dict[str,Dict[str,Any]]更好的方法键入提示返回加载的YAML文件 下面是函数: def load_yaml(yaml_in: str) -> Dict[str, Dict[str, Any]]: return yaml.load(open(yaml_in), Loader=yaml.FullLoader) 下面是加载Y

我正在向Python代码中添加类型提示,并且想知道在加载的YAML文件中键入提示的正确方法是什么,因为它是一个包含任意数量字典的字典

有没有比Dict[str,Dict[str,Any]]更好的方法键入提示返回加载的YAML文件

下面是函数:

def load_yaml(yaml_in: str) -> Dict[str, Dict[str, Any]]:
    return yaml.load(open(yaml_in), Loader=yaml.FullLoader)
下面是加载YAML文件的示例:

VariableMap:
    var1: 'time'
    var2: 'param_name'

GlobalVariables:
    limits:
        x-min:
        x-max:
        y-min:
        y-max:

Plots:
    plot1:
        file: 
        x_data: 'date'
        y_data: [{param: 'param1', label: "param1", color: 'red', linestyle: '-'},
                 {param: 'param2', label: "param2", color: 'black', linestyle: '--'}]
        labels:
            title: {label: 'title', fontsize: '9'}
            x-axis: {xlabel: 'x-label', fontsize: '9'}
            y-axis: {ylabel: 'y-label', fontsize: '9'}
        limits:
            x-min: 0
            x-max: 100
            y-min:
            y-max:

Figures:
    fig1:
        shape: [1, 1]
        size: [6, 8]
        plots: ['plot1']

可能是一个没有答案的重复问题:您提供的链接与我的问题类似。对那个问题的评论使我想到了()。在阅读完注释后,似乎没有一种好的方法可以键入嵌套字典。您可能希望使用TypedDicts(请参阅和)来精确键入字典,或者使用类似的库来验证任意dicts并将其反序列化为预定义类。我自己更喜欢使用pydantic:这两种方法都需要同样的努力,因为它们都需要您定义一个“模式”,但至少pydantic负责为您验证输入。(续)使用这两种方法,嵌套dict都非常简单:只需为每个要精确键入的嵌套dict定义一个新的TypedDict或类,并在父类型中重用该类型。但是,如果你想要真正任意的Dict,而你对值或键名不作任何假设,那么最好的选择可能是
Dict[str,Dict[str,Any]
Dict[str,Dict[str,object]]
。可能是一个没有答案的重复问题:你提供的链接与我的问题类似。对那个问题的评论使我想到了()。在阅读完注释后,似乎没有一种好的方法可以键入嵌套字典。您可能希望使用TypedDicts(请参阅和)来精确键入字典,或者使用类似的库来验证任意dicts并将其反序列化为预定义类。我自己更喜欢使用pydantic:这两种方法都需要同样的努力,因为它们都需要您定义一个“模式”,但至少pydantic负责为您验证输入。(续)使用这两种方法,嵌套dict都非常简单:只需为每个要精确键入的嵌套dict定义一个新的TypedDict或类,并在父类型中重用该类型。但是,如果您想要真正任意的Dict,而您对值或键名不作任何假设,那么您最好选择
Dict[str,Dict[str,Any]
Dict[str,Dict[str,object]]