给定一个ruamel.yaml
CommentedMap()
,和一些转换函数f: CommentedMap → Any
,我想生成一个新的CommentedMap
,它具有转换后的键和值,但在其他方面尽可能与原始的相似。
如果我不关心保持风格,我可以这样做:
result = {
f(key) : f(value)
for key, value in my_commented_map.items()
}
如果我不需要转换密钥(并且我不关心改变原始密钥),我可以这样做:
for key, value in my_commented_map.items():
my_commented_map[key] = f(value)
1条答案
按热度按时间mzillmmw1#
样式和注解信息都通过特殊的属性附加到
CommentedMap
中。样式可以复制,但注解部分索引到它们出现的行的关键字,如果您转换该关键字,则还需要转换索引的注解。在你的第一个例子中,你将
f()
应用于键和值,我将在我的例子中使用单独的函数,所有的键都是大写的,所有的值都是小写的(当然,这只适用于字符串类型的键和值,所以这是例子的限制,而不是解决方案的限制)其给出:
请注意:
(key, value, comment)
元组比存储pop()
所有键并重新插入存储的值(而不是重建树)可能更容易。