我正在处理图像处理脚本。我需要让用户指定如何通过文本文件重新映射图像中的某些类。该文件中的语法应简单明了。我想做的是让用户编写字典的字符串版本:
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
从“字符串版本”到真正的字典的转换有简单的方法吗?您能想到用户可以使用的更简单/替代的单行语法吗?
最佳答案
您可以使用 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'