如何将list
的str表示形式(例如下面的字符串)转换为dictionary
?
a = '[100:0.345,123:0.34,145:0.86]'
预期输出:
{100:0.345,123:0.34,145:0.86}
首先尝试使用ast.literal_eval
将字符串转换为列表。但它显示错误为:invalid syntax
答案 0 :(得分:8)
由于语法错误,因此显示为无效语法,所以您可以这样做
ast.literal_eval(a.replace("[","{").replace("]", "}"))
或者在字典理解中自己解析字符串
{x.split(":")[0]: x.split(":")[1] for x in a[1:-1].split(",")}
如果您提到的字符串中其他地方有[
或]
,则以下内容可能更可靠
ast.literal_eval("{" + a[1:-1] +"}")
答案 1 :(得分:5)
我会尝试
eval(a.replace('[', '{').replace(']', '}'))
答案 2 :(得分:1)
要转换为字典,请执行以下操作:
data = '[100:0.345,123:0.34,145:0.86]'
new_data = dict(y.split(':') for y in (x.strip().strip('[').strip(']')
for x in data.split(',')))
print(new_data)
或者如果您需要数字而不是字符串:
new_data = dict((map(float, y.split(':'))) for y in (
x.strip().strip('[').strip(']') for x in data.split(',')))
{'100': '0.345', '123': '0.34', '145': '0.86'}
{145.0: 0.86, 123.0: 0.34, 100.0: 0.345}
答案 3 :(得分:0)
将方括号转换为大括号double
。
literal_eval
答案 4 :(得分:0)
a ='[100:0.345,123:0.34,145:0.86]'
a = a [1:-1] .split(“,”)
d1 = [a中x的x.split(“:”)
d2 = {对于d1中的k,为int(k [0]):float(k [1])}