对字典中的key迭代修改并dump到yaml文件中

2023-10-31

目录

1.解决迭代修改key的报错问题

2.将字典存入yaml文件中


本次工作的内容是将yaml文件中的key值进行修改并存入新的yaml文件。

1.解决迭代修改key的报错问题

字典中的key是不能通过循环修改的,会报错:

RuntimeError: dictionary changed size during iteration

所以我们可以通过创建一个新的键值对,并删除原来的键值对来修改key:

def convert(org_dict):

    for key, value in list(org_dict.items()):

        #替换key
        old_key = key

        #定义新的key
        key  = smiles2selfies(key)

        #给key赋值
        org_dict[key] = value

        #删掉原来的key
        del org_dict[old_key]


    return org_dict
out = convert(data)

这样我们就可以循环的对key进行修改了。

2.将字典存入yaml文件中

首先用  yaml.safe_load(file_data)  获取yaml中字典格式的数据。

import yaml

file = open('/30t/lzj/drug/mol_opt/main/reinvent_selfies/results/results_reinvent_selfies_qed_0.yaml', 'r', encoding="utf-8")

#读取文件中的所有数据

file_data = file.read()

file.close()

#指定Loader

# data = yaml.load(file_data,Loader=yaml.FullLoader)
data = yaml.safe_load(file_data)

再将修改完的字典存入yaml文件

import os

"""
如果没有指定输出文件夹,就创建一个文件夹
sys.path.append(os.path.realpath(__file__))
path_main = os.path.dirname(os.path.realpath(__file__))
if output_dir is None:
        output_dir = os.path.join(path_main, "results")
"""

output_dir = ("/30t/lzj/drug/mol_opt/main/reinvent_selfies/results/")
output_file_path = os.path.join(output_dir, 'new2_results_' + "SELFIES" + '.yaml')

#对输出的字典进行排序,排序依据为value的第一个值的大小
#kv[1][0]中的第一个位置 1 表示字典中的value,0表示key;第二个位置的 0 表示第一个位置的值,1 表示第二个位置的值
result = dict(sorted(data.items(), key=lambda kv: kv[1][0], reverse=True))

with open(output_file_path, 'w') as f:
            #sort_keys表示是否按照key排序,此处我们选择False
            yaml.dump(result, f, sort_keys=False, default_flow_style=False)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对字典中的key迭代修改并dump到yaml文件中 的相关文章

随机推荐

  • 一次让人难以忘怀的排查频繁Full GC过程

    我们的Java应用因频繁FULL GC导致性能降低很多 经过多人的定位也没有结论 于是我自主请命 经过一天的研究终于搞定了 现把经验与大家共享 相关的gc日志如下 4 758 Full GC PSYoungGen 464K gt 0K 71
  • linux统计一个文件中特定字符的个数

    统计一个文件中某个字符串的个数 其实就是在在一块沙地里面找石头 有的人看到石头以后 在上面做个标记 grep 然后记住自己做了多少个标记 有的 人看到石头以后 把它挖了 tr 最后统计自己挖了多少石头 有的人看到石头以后 把它跳过去 awk
  • STL:list的模拟实现(迭代器失效探讨)

    为什么重新设计list迭代器 对迭代器解引用 我们希望拿到的是指针所指向的值域 而直接解引用拿到的是指针所指向的节点 对list指针 和 迭代器 提供一种方法 使其能够按照顺序访问容器 聚合物 所含的各个元素 并且不用暴露容器内部的表述方式
  • 达芬奇15中文版

    教程 1 下载解压 得到davinci resolve 15原程序和文件 2 双击文件 DaVinci Resolve Studio 15 0b2 Windows exe 依提示安装原程序 3 达芬奇软件需要安装必要的组件 一般按默认安装即
  • Flexible弹性布局

    flex布局 弹性布局 flex的两个重要概念 开启了flex布局的元素叫flex container display flex inline flex flex container 里面的直接子元素叫做 flex items flex布局
  • 来源查询检索的研究

    来源查询检索的研究 来源查询的方式主要有 基于内容索引的查询 gt 基于时间局部性的上下文增强搜索查询 gt 基于因果关系的查询 根据provenance提供上下文有关的索引 即因果关系 1 传统的来源查询检索方式为基于内容索引的查询 在这
  • 阿里云视频点播文件上传-iOS

    文章目录 阿里云视频点播文件上传 iOS 一 上传方式 方式一 上传地址加凭证上传 1 请求AppServer 2 在start的回调中设置上传地址和上传凭证 3 uploadAuth过期重新设置 4 上传图片和上传视频 方式二 STS方式
  • 记一次线上CPU持续飙升的问题排查

    最近公司的事务多了很多 都很少有时间来更新了 上周六项目上刚刚发生了一次CPU持续飙高 导致服务不可用的线上事故 在此也简单做下记录 问题排查的过程大概是这样的 查看业务日志中最开始报错的信息 发现数据库连接超时 redis也连接超时 而且
  • 嵌入式实践——烟雾产生器

    开发工具 Altium Designer 2020 STM32CubeMX 5 3 0 MDK ARM 5 28 1 设计需求 设计出一套完整的烟雾产生装置 该装置通过按钮来控制烟雾的产生和关闭 装置对体积要求较高 所以控制板需控制在4cm
  • WPF 文本框错误验证 Validation.ErrorTemplate

    前端 1 错误模板ValidationContent xaml
  • 智能算法系列之粒子群优化算法

    本博客封面由ChatGPT DALL E 2共同创作而成 文章目录 前言 1 算法思想 2 细节梳理 2 1 超参数的选择 2 2 一些trick 3 算法实现 3 1 问题场景 3 2 python实现 代码仓库 IALib GitHub
  • CTF做题总结(二)

    前言 最近这段时间在内部平台上做了一些Web题 和最基础的Reverse签到题 虽说还有两道Reverse题没做出来 但还是先总结一下吧 Web1 BASE INJECT 看题目提示 就知道这道题之前做过 不过当时没总结 现在总结一下 题目
  • Latent Diffusion(CVPR2022 oral)-论文阅读

    文章目录 摘要 背景 算法 3 1 Perceptual Image Compression 3 2 Latent Diffusion Models 3 3 Conditioning Mechanisms 实验 4 1 On Percept
  • sql中in查不出数据怎么办?

    在写代码的时候突然想到一个问题 用in关键字查不出来东西怎么办 sql报错怎么办 我在生产环境中用了如下的代码 select from cons account where id in select cons id from meter w
  • img 转化成iso镜像的办法

    最近在使用KVM启用虚拟机 然后将里面的环境和配置 配置成我们公司需要的环境 再打包成iso镜像 之后再次生成新的虚拟机 但是KVM启动出的镜像生成的是img镜像 需要将img镜像转换成iso镜像 网上找了好多 比如imgtoiso 这个软
  • python 调用js的四种方式

    1 前言 日常 Web 端爬虫过程中 经常会遇到参数被加密的场景 因此 我们需要分析网页源代码 通过调式 一层层剥离出关键的 JS 代码 使用 Python 去执行这段代码 得出参数加密前后的 Python 实现 本文将聊聊利用 Pytho
  • RabbitMQ和kafka的区别

    1 应用场景方面 RabbitMQ 用于实时的 对可靠性要求较高的消息传递上 kafka 用于处于活跃的流式数据 大数据量的数据处理上 2 架构模型方面 producer broker consumer RabbitMQ 以broker为中
  • LVGL移植教程

    LVGL是一个商业开源的UI库 内存占用量最少只需要 16K UI效果动画等也十分丰富 因此凭借这低内存消耗 控件主题等丰富的特点发展也是比较快的 目前LVGL的迭代更新对API接口改动还是比较大的 此文档针对 LVGL8 1 1版本进行说
  • std::move失效问题

    一 问题 在C 中 std move是一个用于将对象转移所有权的函数模板 它将对象的状态从一个对象转移到另一个对象 通常用于优化移动语义 那std move什么情况下会失效呢 有这样一个代码需求 在lambda中 将一个捕获参数move给另
  • 对字典中的key迭代修改并dump到yaml文件中

    目录 1 解决迭代修改key的报错问题 2 将字典存入yaml文件中 本次工作的内容是将yaml文件中的key值进行修改并存入新的yaml文件 1 解决迭代修改key的报错问题 字典中的key是不能通过循环修改的 会报错 RuntimeEr