首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从字典中初始化Python数据集

从字典中初始化Python数据集
EN

Stack Overflow用户
提问于 2021-07-17 04:10:28
回答 3查看 14.7K关注 0票数 15

假设我想初始化以下数据集

代码语言:javascript
运行
复制
from dataclasses import dataclass

@dataclass
class Req:
    id: int
    description: str

我当然可以这样做:

代码语言:javascript
运行
复制
data = make_request() # gives me a dict with id and description as well as some other keys.
                      # {"id": 123, "description": "hello", "data_a": "", ...}
req = Req(data["id"], data["description"])

但是,我是否可以使用字典解压来完成这个任务,因为我需要的键总是字典的子集

代码语言:javascript
运行
复制
req = Req(**data)  # TypeError: __init__() got an unexpected keyword argument 'data_a'
EN

Stack Overflow用户

发布于 2021-07-17 04:34:53

您可以引入一个新函数来执行从dict到dataclass的给定转换:

代码语言:javascript
运行
复制
import inspect
from dataclasses import dataclass

@dataclass
class Req:
    id: int
    description: str

def from_dict_to_dataclass(cls, data):
    return cls(
        **{
            key: (data[key] if val.default == val.empty else data.get(key, val.default))
            for key, val in inspect.signature(Req).parameters.items()
        }
    )

from_dict_to_dataclass(Req, {"id": 123, "description": "hello", "data_a": ""})
# Output: Req(id=123, description='hello')

注意,需要if val.default == val.empty条件来检查数据集是否有默认值集。如果这是真的,那么在构造数据块时,我们应该考虑给定的值。

票数 9
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68417319

复制
相关文章

相似问题

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