将内置字典格式的字符串转换为字典的pythonic方法是什么?我已经尝试过正则表达式,但是格式不正确。
string_dictable ="{""name"":""Andrew,Carnegie"",""short_name"":""And,Car"",
""YOB"":1835,""Citizen"":""Scottish""}"
所有多余的引号填充似乎都是问题,到目前为止,我仍无法解决它们。
我的预期输出是:
dicted_string ={"name":"Andrew, Carnegie","short_name":"And,Car","YOB":1835,"Citizen":"Scottish"}
我也尝试过
ast.literal_eval (string_dictable)
无济于事。
编辑: 我没有触及原始格式,但是很遗憾,原始问题无法澄清或修改。谢谢大家的贡献。 正如我所说的,正则表达式解决方案让我有了
{'{name': 'Andrew,Carnegie,short_name:And,Car,YOB:1835,Citizen:Scottish}'}
这并不是我要做一些工作所需要的。
答案 0 :(得分:0)
您的RCVTIMEO
包含语法错误(在应有两个引号的地方带有两个引号)。试试这个:
string_dictable
答案 1 :(得分:0)
使用
json模块的解决方案
import json
dicted_string = json.loads(string_dictable.replace('""','"')
我不知道哪种优雅的方法可以处理原始字符串中的双引号,否则该字符串基本上是好的json格式。
如果您能够更改字符串的来源以消除双引号(“”),则只需将string_dictable馈送到json.loads即可从字符串中获取字典。
答案 2 :(得分:-1)
只需将“”替换为“,然后使用eval()即可。 很简单,就像这样:
string_dictable ='{""name"":""Andrew,Carnegie"",""short_name"":""And,Car"",""YOB"":1835,""Citizen"":""Scottish""}'
string_dictable = string_dictable.replace('""','"')
d = eval(string_dictable)
d 是有效的词典。
答案 3 :(得分:-2)
好的,几乎完全替换了这个答案,但下面保留了原始答案。
因此,根据我的收集,当前的问题是OP具有一个文本文件,其中包含以下内容:
"{""name"":""Andrew,Carnegie"",""short_name"":""And,Car"",""YOB"":1835,""Citizen"":""Scottish""}"
因此,当将文件读入python时,这是需要发生的事情:
f = open('stack.txt','r+') #I've made a text file with the above inside of it named stack.txt
for i in f:
fixed = str(i).replace('"', "'")
fixed = fixed.replace("''", '"')
d = eval(fixed)
d现在将被格式化为:{"name":"Andrew,Carnegie","short_name":"And,Car","YOB":1835,"Citizen":"Scottish"}
第一个修复程序将其更改为:'{''name'':''Andrew,Carnegie'',''short_name'':''And,Car'',''YOB'':1835,''Citizen'':''Scottish''}'
第二遍修复''问题:
'{"name":"Andrew,Carnegie","short_name":"And,Car","YOB":1835,"Citizen":"Scottish"}'
最后,评估将其变成字典。
非常容易使用eval(string)
这是我做的一个快速模型。确保使用类似的语法,您应该会很好。
>>> String = '{"name":"Andrew,Carnegie","short_name":"And,Car", "YOB":1835,"Citizen":"Scottish"}'
>>> dictionary = eval(String)
>>> dictionary['name']
'Andrew,Carnegie'
>>>
编辑:不知道为什么到目前为止,eval()
方法是将字符串转换为字典的最简单方法,如果输入不能被OP修改,那么我可以研究解决方案但是问题是原始字符串甚至无法被Python读取:
>>> string_dictable ="{""name"":""Andrew,Carnegie"",""short_name"":""And,Car"",
""YOB"":1835,""Citizen"":""Scottish""}"
SyntaxError: EOL while scanning string literal
因此,除非将其存储在文本文件中,并且可以在输入变量时对其进行修改,否则从python的角度来看,这无能为力。