首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OmegaConf:将dict转换为对象列表

OmegaConf:将dict转换为对象列表
EN

Stack Overflow用户
提问于 2022-04-27 14:22:32
回答 1查看 693关注 0票数 0

我正试图自动转换

代码语言:javascript
复制
from omegaconf import OmegaConf
s = """
nodes:
  node1:
   group: standard
   status: online
  node2:
   group: small
   status: online
  node3:
   group: standard
   status: offline
"""

到节点列表中,其中"node1/2/3“是节点的名称:

代码语言:javascript
复制
from dataclasses import dataclass
from typing import List

@dataclass
class Node:
  name: str
  group: str
  status: str

@dataclass
class Config:
  nodes: List[Node]

使用

代码语言:javascript
复制
conf = OmegaConf.create(s)
schema = OmegaConf.structured(Config)
merged_conf = OmegaConf.merge(schema, conf)

是否有这方面的机制?如果我从盒子里拿出来试试看

代码语言:javascript
复制
omegaconf.errors.ConfigTypeError: Cannot merge DictConfig with ListConfig
EN

回答 1

Stack Overflow用户

发布于 2022-04-27 16:22:33

错误告诉您,您正试图将字典与不支持的列表合并。您的架构说节点是一个List[Node],但是您的YAML字符串包含一个映射(词典的YAML术语)。

要么更改您的架构以指示节点是一个Dict:

代码语言:javascript
复制
@dataclass
class Config:
  nodes: Dict[str, Node]

或将YAML字符串更改为包含列表:

代码语言:javascript
复制
s = """
nodes:
 - group: standard
   status: online
 - group: small
   status: online
 - group: standard
   status: offline
"""
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72030476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档