Преобразовать список строк в исходный список Python в указанном формате - PullRequest
0 голосов
/ 26 сентября 2018

Я читаю строку из текстового файла: Текстовый файл выглядит следующим образом:

  2 [209:0.3720511,256:0.3525813,300:0.3466443,148:0.3456179,246:0.3443979,267:0.3425797,126:0.3397026,10:0.3379505,266:0.3357508,301:0.334953]

Я пытаюсь преобразовать [209:0.3720511,256:0.3525813,300:0.3466443,148:0.3456179,246:0.3443979,267:0.3425797,126:0.3397026,10:0.3379505,266:0.3357508,301:0.334953] в список, содержащий значения [209,256,300,148,246,267...]

Я перешел по этой ссылке: Преобразовать строковое представление списка в список

Вот мой код, но он не работает:

  with open("file.txt", "r") as text_file:
  for line in itertools.islice(text_file, 19, 20): # only one line
     print(ast.literal_eval(line.split("    ")[1]))

выдаёт ошибку.

Пожалуйста, помогите.

Ответы [ 2 ]

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

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

  • разделить на пробел
  • взять последний элемент
  • заменить проблемные элементы[] с {}
  • выполнить буквальную оценку literal_eval = выводить python dict

    line_fixed = literal_eval(line.split(' ')[-1].replace('[', '{').replace(']', '}'))
    print (line_fixed.keys() )
    print (line_fixed.values() )
    
0 голосов
/ 26 сентября 2018

Двоеточие не является частью действительного числа в Python.Поэтому ast.literal_eval неуместно.

Вместо этого вы можете использовать понимание списка в сочетании с str.split и нарезкой:

x = '[209:0.3720511,256:0.3525813,300:0.3466443,148:0.3456179,246:0.3443979,267:0.3425797,126:0.3397026,10:0.3379505,266:0.3357508,301:0.334953]'

res = [int(i.split(':')[0]) for i in x[1:-1].split(',')]

# [209, 256, 300, 148, 246, 267, 126, 10, 266, 301]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...