首页 > 解决方案 > 将格式不正确的字符串转换为字典?

问题描述

现在的问题是我有一个字符串

'{ecl:gry, hcl:#888785, eyr:2023, cid:63, iyr:2019, hgt:177cm, pid:656793259}'

我无法将 ast.literal_eval 转换为 dict,因为它的格式不正确。所以我尝试用引号包裹字母数字字符。

        output = ""
        quoting = False
        for char in string:
            if char.isalnum():
                if not quoting:
                    output += '"'
                    quoting = True
            elif quoting:
                output += '"'
                quoting = False 
            output += char

但是,一些键值对的值具有特殊字符开头。这导致:

"hcl":#"888785",

代替:

"hcl":"#888785",

因此,我能够为 ast.literal_eval() 重新格式化字符串的最接近方法是

{"ecl":"gry", "hcl":#"888785", "eyr":"2023", "cid":"63", "iyr":"2019", "hgt":"177cm", "pid":"656793259"}

如何在将此字符串转换为字典的同时包含特殊字符?

标签: python

解决方案


您可以在生成器表达式中使用splitandstrip来使其在一行中工作:

s = "{ecl:gry, hcl:#888785, eyr:2023, cid:63, iyr:2019, hgt:177cm, pid:656793259}"
d = dict(e.split(":") for e in s.strip("{},").split())

推荐阅读