将字符串转换成字典

时间:2018-08-10 14:30:50

标签: python json dictionary string-parsing

将内置字典格式的字符串转换为字典的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}'}

这并不是我要做一些工作所需要的。

4 个答案:

答案 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的角度来看,这无能为力。