现在的问题是我有一个字符串
'{ecl:gry, hcl:#888785, eyr:2023, cid:63, iyr:2019, hgt:177cm, pid:656793259}'我不能ast.literal_eval转换成一个字典,因为它没有正确的格式。因此,我尝试用引号对字母数字字符进行包装。
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"}如何在将此字符串转换为字典的同时包含特殊字符?
发布于 2020-12-05 06:15:43
这里有一个可以做到这一点的线条。这将去掉{和}字符,在', '上拆分,然后在:上进一步拆分每个结果。然后,这些结果成为创建字典的key v值对。
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'}发布于 2020-12-05 06:22:03
您可以在生成器表达式中使用split和strip来在一行中执行此操作:
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())https://stackoverflow.com/questions/65151378
复制相似问题