Преобразовать SrtingSet в строку

#python #string #set

#python #строка #установить

Вопрос:

Я хочу преобразовать stringset в строку, используя python3.

Input = «{‘abc’,’def’}»

Я перепробовал все доступные мне возможности, такие как eval, literal_eval и преобразование в set и т.д. Но я не смог найти решение.

Решение и объяснение будут высоко оценены. Спасибо!

Комментарии:

1. Какой результат вы ищете? ('abc','def') ?

2. Эй, я ищу список строк. Спасибо!

Ответ №1:

Выполните преобразование внутри eval вызова:

 inp = "{'abc','def'}"
lst = eval("list("   inp   ")")  # eval("list({'abc','def'})")
print(lst)
  

Вывод:

 ['def', 'abc']
  

Порядок изменен, поскольку исходная строка представляет собой неупорядоченный набор. Чтобы сохранить порядок, вам нужно поменять скобки местами:

 inp = "{'abc','def'}"
lst = eval("["   inp[1:-1]  "]")  # eval("['abc','def']")
print(lst)
  

Вывод:

 ['abc', 'def']
  

Если вы хотите использовать ast.literal_eval вместо eval , попробуйте этот код:

 # read as set
inp = "{'abc','def'}"
lst = list(ast.literal_eval(inp))  # ast.literal_eval("{'abc','def'}")
print(lst)  # ['abc', 'def']
  

 # read as list  
inp = "{'abc','def'}"
lst = list(ast.literal_eval("["   inp[1:-1]  "]"))  # ast.literal_eval("['abc','def']")
print(lst)  # ['abc', 'def']
  

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

Комментарии:

1. Большое вам спасибо. Ценю ваш ответ

2. есть ли способ, который я могу использовать как.literal_eval в этом примере, поскольку pep8 поощряет использование ast.literal_eval для установки eval, потому что это небезопасный метод.

3. Потрясающая работа, Майк.