Как я могу разобрать текстовый файл в словаре и поместить его в словарь в Python? - PullRequest
0 голосов
/ 01 декабря 2010

Я хочу взять текстовый файл, который содержит что-то в форме:

{('q0','a'):('q0','a','R'),
('q0','b'):('q0','a','R'),
('q1',' '):('q1',' ','L')}

и поместите его в настоящий словарь. Я взломал это часами и зашел очень далеко. Я думаю, что решение простое, но я не нашел ничего полезного в Интернете. Любая помощь будет оценена.

Ответы [ 4 ]

3 голосов
/ 01 декабря 2010
>>> ast.literal_eval('''{('q0','a'):('q0','a','R'),
... ('q0','b'):('q0','a','R'),
... ('q1',' '):('q1',' ','L')}
... ''')
{('q1', ' '): ('q1', ' ', 'L'), ('q0', 'a'): ('q0', 'a', 'R'), ('q0', 'b'):
  ('q0', 'a', 'R')}
0 голосов
/ 01 декабря 2010

Простой способ сделать то, что вы хотите, это использовать оператор eval.Однако, если файл будет подделан, это может вызвать проблемы с безопасностью.Я настоятельно рекомендую использовать Pickle для хранения ваших словарей в файле.

0 голосов
/ 01 декабря 2010

Попробуйте использовать exec выражение:

>>> d="""{('q0','a'):('q0','a','R'),
... ('q0','b'):('q0','a','R'),
... ('q1',' '):('q1',' ','L')}"""
>>> exec("myDict=%s" % d)
>>> myDict
{('q1', ' '): ('q1', ' ', 'L'), ('q0', 'a'): ('q0', 'a', 'R'), ('q0', 'b'): ('q0
', 'a', 'R')}
>>>
0 голосов
/ 01 декабря 2010

Если файл содержит действительный код Python, описывающий словарь, просто используйте eval:

>>> value = "{('q0','a'):('q0','a','R'),('q0','b'):('q0','a','R'),('q1',' '):('q1',' ','L')}"
>>> value
"{('q0','a'):('q0','a','R'),('q0','b'):('q0','a','R'),('q1',' '):('q1',' ','L')}"
>>> d = eval(value)
>>> type(d)
<type 'dict'>
>>> d
{('q1', ' '): ('q1', ' ', 'L'), ('q0', 'a'): ('q0', 'a', 'R'), ('q0', 'b'): ('q0', 'a', 'R')}

Однако я бы не рекомендовал этот способ передачи информации (например, между программами Python).Для этого я бы использовал что-то вроде pickle или, возможно, сериализации json, в зависимости от конкретных потребностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...