代码之家  ›  专栏  ›  技术社区  ›  Benjamin Cintix

将字典的字符串表示形式转换为真正的字典

  •  5
  • Benjamin Cintix  · 技术社区  · 14 年前

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

    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 回复  |  直到 14 年前
        1
  •  11
  •   Mark Byers    14 年前

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