从 Dict 转到 Dataclass
从 dataclass 转到 dict 可以用 asdict 函数 , 反向转换的时候 就比较困难. 不用外部的包的情况下, 提供一种思路.
def mask(v, d): #v 是 dict 数据, d 是 @dataclass 类型
if isinstance(v, d):
pass
elif isinstance(v, Dict):
x = [v.get(k, None) for k in [i for i in d.__dict__['__annotations__']]]
y = list(d.__init__.__defaults__)
if len(y) > 0:
n = len(x)
m = len(y)
for i in range(m):
if x[n-m+i] is None:
x[n-m+i] = y[i]
x = tuple(x)
v = d(*x)
else:
v = None
return v
以上是转换用的函数, 用于处理 输入参数为dict形式
from dataclasses import dataclass, asdict
from typing import Dict
def mask(v, d): #v 是 dict 数据, d 是 @dataclass 类型
if isinstance(v, d):
pass
elif isinstance(v, Dict):
x = [v.get(k, None) for k in [i for i in d.__dict__['__annotations__']]]
y = list(d.__init__.__defaults__)
if len(y) > 0:
n = len(x)
m = len(y)
for i in range(m):
if x[n-m+i] is None:
x[n-m+i] = y[i]
x = tuple(x)
v = d(*x)
else:
v = None
return v
@dataclass
class ddd:
a: str
c: str = ""
b: str = ""
@dataclass
class bbb:
a: str
b: ddd = None
c: str = ""
def __post_init__(self):
self.b=mask(self.b,ddd)
@dataclass
class aaa:
a: str
b: str
c: bbb = None
def __post_init__(self):
self.c=mask(self.c, bbb)
if __name__=="__main__":
x = aaa(1, 2, {'a': 4, 'b': {'a':6,'c':7}})
y = asdict(x) print(mask(y,aaa))
结果是 :
aaa(a=1, b=2, c=bbb(a=4, b=ddd(a=6, c=7, b=''), c=''))
从 Dict 转到 Dataclass的更多相关文章
- Python3.7 dataclass 介绍
Posted on 2018年6月28日 by laixintao 1 Comment Python3.7 加入了一个新的 module:dataclasses.可以简单的理解成“支持默认值.可以修改 ...
- tuple放入dict中
tuple放入dict中是否可以正常运行 # 将tuple放入dict中 a = ('AI','Kobe','Yao') b = ('AI',['Kobe','Yao']) dict1 = {'a': ...
- redis数据结构存储Dict设计细节(redis的设计与实现笔记)
说到redis的Dict(字典),虽说算法上跟市面上一般的Dict实现没有什么区别,但是redis的Dict有2个特殊的地方那就是它的rehash(重新散列)和它的字典节点单向链表. 以下是dict用 ...
- python list dict 去重的两种方式
def dedupe(items, key=None): seen = set() for item in items: val = item if key is None else key(item ...
- list,tuple,dict,set常用方法
Python中list,tuple,dict,set常用方法 collections模块提供的其它有用扩展类型 from collections import Counter from collect ...
- python dict clear只能删除一层,不能够递归删除。
void PyDict_Clear(PyObject *op) { dictobject *mp; dictentry *ep, *table; int table_is_malloced; Py_s ...
- Python中内置数据类型list,tuple,dict,set的区别和用法
Python中内置数据类型list,tuple,dict,set的区别和用法 Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, ...
- python第一天 - dict
dict key-value集合. d = { ': 'a', ': 'b', ': 'c' } (一).获取集合长度:len(d) = 3(二).获取值: 方式一:d[key];例:d['1'] = ...
- python利用dict模拟switch
pytho本身并未提供switch语句,但可以通过dict来模拟switch, #方法1 def add(x,y): return x+y def dec(x,y): return x-y def m ...
- python-list tuple dict set
1:删除一个列表末尾的元素 pop方法 >>> a [1, 'Jack', 2, 3, 2] >>> a.pop() >>> a [1, 'Jac ...
随机推荐
- 【Python Web】flask视频流
这篇文档,完全借鉴miguelgrinberg的博客. https://blog.miguelgrinberg.com/post/flask-video-streaming-revisited 想看具 ...
- 🔥httpsok-v1.8.1 一分钟搞定SSL证书自动续期
httpsok-v1.8.1 一分钟搞定SSL证书自动续期 简介 一行命令,一分钟轻松搞定SSL证书自动续期 httpsok 是一个便捷的 HTTPS 证书自动续签工具,专为 Nginx 服务器设计. ...
- c 语言不输出空数据 (全面覆盖)
目录 去除空值的专栏 解决方案 一.通过数组的自身性质,让其值大于零 1. short 数组测试 2. int 数组测试 3. long 数组测试 4. float 数组测试 5. float 数组测 ...
- 一个 .NET 开源的地图组件库 - Mapsui
前言 今天大姚给大家分享一个.NET开源(MIT License).免费.同时支持多平台框架(MAUI.WPF.Avalonia.Uno.Blazor.WinUI.Eto..NET Android 和 ...
- Python缺失值处理实现
在数据处理相关工作中,读取的数据中常常会有缺失值的情况,为顺利进行后续的操作,需要首先对缺失值进行处理,处理的方式一般为删除或填充,Python中提供了专门的工具包,可以方便地进行实现.读取操作可 ...
- item2 报错 a session ended very soon after starting. check that the command in profile default
周末修改了阿里云 ecs 实例密码,再次用item2 远程连接服务器时,报一下的错误: 原因 每次使用ssh 远程新的连接,都会在 ~/.ssh/known_hosts 文件上生成 ssh 秘钥对,更 ...
- B站login-极验逆向
声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 https:// ...
- 详解在Linux中同时安装配置并使用 MySQL5.7 和 MySQL8.0
最近需要使用mysql8.0版本,但是原本的mysql5.7版本已经被多个服务依赖,于是想想能不能同一台服务器装多个版本的mysql,一查确实可行,这里做一个记录方便自己后期回忆 阅读本文前请注意!! ...
- INFINI Labs 产品更新 | Agent 全新重构,优化指标采集,支持集中配置管理,支持动态下发等功能
INFINI Labs 产品又更新啦~ 本次更新主要有 Agent.Console.Loadgen 等产品,其中 Agent 进行全新重构升级,新版限制了 CPU 资源消耗,优化了内存,相比旧版内存使 ...
- pandas、spark计算相关性系数速度对比
pandas.spark计算相关性系数速度对比 相关性计算有三种算法:pearson.spearman,kenall. 在pandas库中,对一个Dataframe,可以直接计算这三个算法的相关系数c ...