【问题标题】:Transforming the string representation of a dictionary into a real dictionary将字典的字符串表示形式转换为真正的字典
【发布时间】:2011-05-06 20:31:02
【问题描述】:

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

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

有没有一种简单的方法可以将“字符串版本”转换为真正的字典?你能想出一种用户可以使用的更简单/替代的单行语法吗?

【问题讨论】:

    标签: python string dictionary numpy


    【解决方案1】:

    你可以使用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'
    

    【讨论】:

    • 谢谢,两者都很好用。我更喜欢你的选择;它将保存另一个导入,并使用旧版本...
    猜你喜欢
    • 2010-11-02
    • 2021-12-01
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多