簡體   English   中英

將格式不正確的字符串轉換為字典?

[英]Convert improperly formatted string into dictionary?

現在的問題是我有一個字符串

'{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"}

如何在將此字符串轉換為字典的同時包含特殊字符?

這是一個可以做到的oneliner。 這會去除{}字符,在', '上拆分,然后在:上進一步拆分每個結果。 這些結果然后成為創建vk對。

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'}

您可以在生成器表達式中使用splitstrip以使其在一行中工作:

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())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM