将字典的字符串表示转换为真实字典

5 投票
1 回答
1043 浏览
提问于 2025-04-16 06:45

我正在做一个图像处理的脚本。需要让用户通过一个文本文件来指定如何重新映射图像中的一些类别。这个文件的语法应该简单明了。我想让用户写出一个字典的字符串版本:

125:126, 126:126, 127:128, 128:128

然后把它转换成一个真正的字典(这就是缺失的部分):

a = {125:126, 126:126, 127:128, 128:128}

接着,图像类别的重新映射就可以这样进行:

u, indices = numpy.unique(image, return_inverse=True)
for i in range(0, len(u)):
    u[i] = a[u[i]]
updatedimage = u[indices]
updatedimage = numpy.resize(updatedimage, (height, width)) #Resize to original dims

有没有简单的方法可以把这个“字符串版本”转换成真正的字典?你能想到更简单或替代的一行语法,让用户使用吗?

1 个回答

11

你可以使用 ast.literal_eval 这个方法:

>>> import ast
>>> ast.literal_eval('{' + s + '}')
{128: 128, 125: 126, 126: 126, 127: 128}

注意,这个方法需要 Python 2.6 或更新的版本。

另外一种方法是先用 ',' 来分割字符串,然后再用 ':' 来分割每一部分,最后根据这些分割的结果来构建一个 dict(字典):

>>> dict(map(int, x.split(':')) for x in s.split(','))
{128: 128, 125: 126, 126: 126, 127: 128}

这两个例子都假设你最开始的字符串保存在一个叫 s 的变量里:

>>> s = '125:126, 126:126, 127:128, 128:128'

撰写回答