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

标签 python string dictionary numpy

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

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'

关于python - 将字典的字符串表示形式转换为真正的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4127344/

相关文章:

python - django/休息 : Can I have serializer with only one field?

python - 如何使用 Smartsheets API Python 检索文件夹树

python - 如何使用 Python 从字符串中删除一个字符

python - 似乎无法遍历键为数字字符串的已排序字典。您如何对字典进行排序以进行迭代?

Python将字典中的负值更改为正值

python - 在字典中查找对象属性的最大值

Python:选择字段 "Not a valid choice"

python - 如何制作长度为16倍数的文本?

正则表达式:如何匹配重复的字符或数字

string - 在 perl 中获取字符串的 hahes 键