用例与此帖子略有不同: Convert a String representation of a Dictionary to a dictionary?
区别在于我是从excel电子表格中读取的,因此我的字符串如下所示:
'{numerator: BV, denominator: Price}'
键或值周围没有引号。想知道是否有一些简单的方法可以将其转换为字典。我不认为ast的用法不起作用。
我已经做到了,但是我怀疑这是最好的方法。有什么建议吗?
test_params = '{numerator: BV, denominator: Price}'
comma_split = test_params.replace("{", "").replace("}", "").split(",")
reconstructed_params = {}
for i in comma_split:
splitted = i.split(":")
splitted[0] = splitted[0].strip()
splitted[1] = splitted[1].strip()
reconstructed_params[splitted[0]] = splitted[1]
print(reconstructed_params)
{'numerator': 'BV', 'denominator': 'Price'}
一个很好的简单方法会很棒。有时候,我的值是列表,但我想一次只能做一件事。
答案 0 :(得分:1)
Te引号用于保护键和值免受其他引号,冒号,花括号等的影响。现在,如果键的值是字母数字,则可以对正则表达式应用 add ,然后使用ast.literal_eval
import re,ast
d = ast.literal_eval(re.sub('(\w+)',r'"\1"','{numerator: BV, denominator: Price}'))
>>> type(d)
<class 'dict'>
>>> d
{'denominator': 'Price', 'numerator': 'BV'}
此解决方案采用假设是相当通用的,因为它也可以解码嵌套字典。