如何将类似下面的字符串表示的list
转换成一个dictionary
?
a = '[100:0.345,123:0.34,145:0.86]'
期望输出:
{100:0.345,123:0.34,145:0.86}
首先尝试使用ast.literal_eval
将字符串转换为列表,但是出现了错误:无效语法
如何将类似下面的字符串表示的list
转换成一个dictionary
?
a = '[100:0.345,123:0.34,145:0.86]'
期望输出:
{100:0.345,123:0.34,145:0.86}
首先尝试使用ast.literal_eval
将字符串转换为列表,但是出现了错误:无效语法
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] +"}")
eval(a.replace('[', '{').replace(']', '}'))
a
来自哪里... 如果它不是来自用户输入,那么为了这个目的而导入 ast
可能会有些麻烦。 - Aemyldata = '[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}
将括号转换为花括号,使用literal_eval
函数。
rebracket = {91: 123, 93: 125}
a = '[100:0.345,123:0.34,145:0.86]'
literal_eval(a.translate(rebracket))
给定一个字典的字符串表示:
a = '[100:0.345,123:0.34,145:0.86]'
忽略包含的大括号[..]
,并在逗号上分解元素:
a = a[1:-1].split(",")
对于每个元素,分离键和值:
d1 = [x.split(":") for x in a]
d2 = { int(k[0]) : float(k[1]) for k in d1}
[
或]
,例如'[100:"[",123:0.34,145:0.86]'
,则此方法将无法正常工作。 - blhsing