Python3词典中的逃逸乳胶字符

2024-09-29 19:30:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典,它需要正确地将值转义以供乳胶消费。在

步骤:

从文本文件中获取一些JSON到python字典中。在

d1 = {'a': 'art', 'b': 'a_$b', 'c': ['_#', 'h'], 'd': {'e': 4, 'f#_a': {'g': '^_$#&'}}}

制作要转换的所有项目的词典:

^{pr2}$

使d2来自d1tex,注意只有叶节点被转义:

>>>> d2 = unknown code here
>>>> d2
{'a': 'art', 'b': 'a\_\$b', 'c': ['\_\#', 'h'], 'd': {'e': 4, 'f#_a': {'g': '\^\_\$\#\&'}}}

这是我迄今为止的一份粗略的尝试。如您所见,我一直在重新创建d2。在

def texEscape(originalKey, d):                                                                                                              
    if isinstance(d, dict):
        for k, v in d.items():
            if isinstance(v, str):
                print(k)
                print(v)
                print()
            else:
                texEscape(originalKey, v)
    elif isinstance(d, list):
        for i in d:
            texEscape(originalKey, i)
    else:
        print(originalKey)
        print(d)
        print()

Tags: inforif字典步骤else乳胶isinstance
1条回答
网友
1楼 · 发布于 2024-09-29 19:30:32

最初我只打算做一个dict理解,其中每个字符串值都被tex替换,但是我没有意识到你有嵌套的列表dicts。这很管用。在

>>> tex = {
            '&':  '\&',
            '%':  '\%',
            '$':  '\$',
            '#':  '\#',
            '_':  '\_',
            '^':  '\^',
        }
>>> def change(x):
    key,value = x
    if isinstance(value, dict):
        return key,dict(map(change,value.items()))
    elif isinstance(value, list):
        return key,[''.join(tex[c] if c in tex else c for c in str(x)) for x in value]
    else:
        return key,''.join(tex[c] if c in tex else c for c in str(value))
>>> d1 = {'a': 'art', 'b': 'a_$b', 'c': ['_#', 'h'], 'd': {'e': 4, 'f#_a': {'g': '^_$#&'}}}
>>> d2 = dict(map(change,d1.items()))
>>> d2
{'b': 'a\\_\\$b', 'd': {'e': '4', 'f#_a': {'g': '\\^\\_\\$\\#\\&'}}, 'c': ['\\_\\#', 'h'], 'a': 'art'}

{cd2>每一个值都是必要的。这是最简单的解决方案吗?可能没有。但它是python的,因为它不导入任何外部模块

相关问题 更多 >

    热门问题