将列表的字符串表示形式转换为字典Python

时间:2018-09-27 05:36:00

标签: python string list dictionary

如何将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

5 个答案:

答案 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])}