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

Ben*_*min 5 python string dictionary numpy

我正在处理图像处理脚本.我需要让用户指定如何通过文本文件重新映射图像中的某些类.此文件中的语法应该简单明了.我想做的是让用户编写字典的字符串版本:

125:126, 126:126, 127:128, 128:128
Run Code Online (Sandbox Code Playgroud)

然后将其转换为真正的字典(这是缺少的链接):

a = {125:126, 126:126, 127:128, 128:128}
Run Code Online (Sandbox Code Playgroud)

然后重新映射图像的类将如下所示:

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
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以从"字符串版本"转换为真正的字典?您能想到用户可以使用的更简单/替代的单行语法吗?

Mar*_*ers 11

你可以使用ast.literal_eval:

>>> import ast
>>> ast.literal_eval('{' + s + '}')
{128: 128, 125: 126, 126: 126, 127: 128}
Run Code Online (Sandbox Code Playgroud)

请注意,这需要Python 2.6或更高版本.

另一种方法是将字符串拆开','然后拆分每个部分':'并构造一个dict:

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

这两个示例都假设您的初始字符串位于一个名为的变量中s:

>>> s = '125:126, 126:126, 127:128, 128:128'
Run Code Online (Sandbox Code Playgroud)