个人总结
command.py
file.py
time.py
excel.py
with 的原理和用法
subprocess 模块
cline 提示词
PathLike
pathlib
peewee
生成随机ID
FastApi 使用 peewee
http connect
Dataframe Protocol
pyarrow
overload 函数重载
1111
peewee 线程安全
Python 日志模块
rabbitmq 问答
多进程 daemon 参数
记录异常
dict.py
多进程
忽略异常
timer.py
Ctrl+C 退出while
发布pip包
Bolo组件
迭代器与生成器
dataclass
单例模式(二)
单例模式(一)
errors.py
enum.py
每日学习
本文档使用 MrDoc 发布
-
+
首页
dict.py
字典的一些高级方法: - 字典的递归合并 - 字典平铺 - 字典折叠 ``` from copy import deepcopy def prefix_dict(data, prefix_s=''): """ 把字典的每个key都带上前缀prefix_s :param data: :param prefix_s: :return: """ return {prefix_s + k: v for k, v in data.items()} def dict_unfold(data, con_s='.'): """ 平铺dict(如果下层还是dict),需要递归,展开到下层的数据类型不是字典为止 可能实用的地方:将文档类的数据格式化成更加关系化的样子可能有用 :param data: 输入字典 :param con_s: 层级间的连接符号 :return: 深度不大于1的字典,嵌套的其他数据类型照旧 """ ret_di = {} for k, v in data.items(): if isinstance(v, dict): v = dict_unfold(v) # 这里或许有不写到这一层的更好写法 # for k_, v_ in v.items(): # ret_di.update({con_s.join([k, k_]): v_}) ret_di.update(prefix_dict(v, prefix_s=k + con_s)) else: ret_di.update({k: v}) return ret_di def dict_merge(a, b): """ 合并字典(以递归的方式) 普通的dict.update()不能递归的合并,而是直接替换 """ if not isinstance(b, dict): return b result = deepcopy(a) for k, v in b.items(): if k in result and isinstance(result[k], dict): result[k] = dict_merge(result[k], v) else: result[k] = deepcopy(v) return result def dict_fold(data, split_="."): """折叠dict:将平铺后的字典再折叠起来""" result = {} for k, v in data.items(): if split_ in k: ks = k.split(split_) d = result for i, k0 in enumerate(ks): if i < len(ks) - 1: if k0 not in d: d[k0] = {} d = d[k0] else: d[k0] = v else: result.update({k: v}) return result if __name__ == "__main__": d = { "name": "111", "job": { "company": "222", "title": "333", "location": "555", "abc": { "a": "a", "b": "b", } } } r = dict_unfold(d) print(r) r = dict_fold(r) print(r) ```
gaojian
2023年4月20日 10:59
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
关于 MrDoc
觅思文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅思文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅思文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
Markdown文件
分享
链接
类型
密码
更新密码