Преобразование строкового представления словаря в реальный словарь - PullRequest
5 голосов
/ 08 ноября 2010

Я работаю над сценарием обработки изображений. Мне нужно позволить пользователю указать, как переназначить некоторые классы в изображении через текстовый файл. Синтаксис в этом файле должен быть простым и самоочевидным. Я хотел заставить пользователя написать строковую версию словаря:

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 Ответ

11 голосов
/ 08 ноября 2010

Вы можете использовать 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...