Преобразовать строковое представление списка в словарь Python - PullRequest
0 голосов
/ 27 сентября 2018

Как я могу преобразовать строковое представление list, такое как строка ниже, в dictionary?

a = '[100:0.345,123:0.34,145:0.86]'

Ожидаемый результат:

{100:0.345,123:0.34,145:0.86}

Первая попыткапреобразовать строку в список, используя ast.literal_eval.Но он показывает ошибку как: invalid syntax

Ответы [ 5 ]

0 голосов
/ 27 сентября 2018

a = '[100: 0,345,123: 0,34,145: 0,86]'
a = a [1: -1] .split (",")
d1 = [x.split (":") для x в a]
d2 = {int (k [0]): float (k [1]) для k в d1}

0 голосов
/ 27 сентября 2018

Перевести скобки в фигурные скобки, literal_eval.

rebracket = {91: 123, 93: 125}
a = '[100:0.345,123:0.34,145:0.86]'
literal_eval(a.translate(rebracket))
0 голосов
/ 27 сентября 2018

Я бы просто попробовал

eval(a.replace('[', '{').replace(']', '}'))
0 голосов
/ 27 сентября 2018

Для преобразования в диктовку:

Код:

data = '[100:0.345,123:0.34,145:0.86]'

new_data = dict(y.split(':') for y in (x.strip().strip('[').strip(']')
                                       for x in data.split(',')))

print(new_data)

Или, если вам нужны числа, а не строки:

new_data = dict((map(float, y.split(':'))) for y in (
    x.strip().strip('[').strip(']') for x in data.split(',')))

Результаты:

{'100': '0.345', '123': '0.34', '145': '0.86'}

{145.0: 0.86, 123.0: 0.34, 100.0: 0.345}
0 голосов
/ 27 сентября 2018

Он отображается как неверный синтаксис, потому что у него неправильные скобки, поэтому вы можете сделать

ast.literal_eval(a.replace("[","{").replace("]", "}"))

или, в качестве альтернативы, самостоятельно проанализировать строку в словаре

{x.split(":")[0]: x.split(":")[1] for x in a[1:-1].split(",")}

и, если какупомянуто, что [ или ] в других местах вашей строки, следующие могут быть более надежными

ast.literal_eval("{" + a[1:-1] +"}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...