首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否将格式不正确的字符串转换为字典?

是否将格式不正确的字符串转换为字典?
EN

Stack Overflow用户
提问于 2020-12-05 06:05:15
回答 2查看 47关注 0票数 3

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

代码语言:javascript
复制
'{ecl:gry, hcl:#888785, eyr:2023, cid:63, iyr:2019, hgt:177cm, pid:656793259}'

我不能ast.literal_eval转换成一个字典,因为它没有正确的格式。因此,我尝试用引号对字母数字字符进行包装。

代码语言:javascript
复制
        output = ""
        quoting = False
        for char in string:
            if char.isalnum():
                if not quoting:
                    output += '"'
                    quoting = True
            elif quoting:
                output += '"'
                quoting = False 
            output += char

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

代码语言:javascript
复制
"hcl":#"888785",

而不是:

代码语言:javascript
复制
"hcl":"#888785",

因此,在为ast.literal_eval()重新格式化字符串时,我所能得到的最接近的结果是

代码语言:javascript
复制
{"ecl":"gry", "hcl":#"888785", "eyr":"2023", "cid":"63", "iyr":"2019", "hgt":"177cm", "pid":"656793259"}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-05 06:15:43

这里有一个可以做到这一点的线条。这将去掉{}字符,在', '上拆分,然后在:上进一步拆分每个结果。然后,这些结果成为创建字典的key v值对。

代码语言:javascript
复制
sval= '{ecl:gry, hcl:#888785, eyr:2023, cid:63, iyr:2019, hgt:177cm, pid:656793259}'
sval = {k:v for (k,v) in [s.split(':') for s in sval.strip('{}').split(', ')]}
>>> sval
{'ecl': 'gry', 'hcl': '#888785', 'eyr': '2023', 'cid': '63', 'iyr': '2019', 'hgt': '177cm', 'pid': '656793259'}
票数 1
EN

Stack Overflow用户

发布于 2020-12-05 06:22:03

您可以在生成器表达式中使用splitstrip来在一行中执行此操作:

代码语言:javascript
复制
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())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65151378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档