Отображение словаря Python не работает должным образом - PullRequest
0 голосов
/ 17 мая 2019

Итак, у меня есть этот текстовый файл, который содержит следующее:

<lang:Foreign> <lang:foreign>
</lang:Foreign> </lang:foreign>
<lang: Foreign> <lang:foreign>
</lang: Foreign> </lang:foreign>

Моя программа выполняет сопоставление первого текста в строке со вторым.Так это будет выглядеть в словаре.

{<lang:Foreign> : <lang:foreign>}
flist = [line.split() for line in f]
for k, v in flist:
    fdict.update({k: v})

Мой код отображения приведен выше.Но проблема заключается в последних двух строках записей

<lang: Foreign> <lang:foreign>
</lang: Foreign> </lang:foreign>

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

<lang:\sForeign> <lang:foreign>
</lang:\sForeign> </lang:foreign>

Любая идея, как я могу сказать моей программе принять это пространство и отобразить его правильно?Спасибо!

Ответы [ 4 ]

0 голосов
/ 17 мая 2019

Использование регулярных выражений, вероятно, наиболее целесообразно здесь.

import re

pattern = re.compile(r'(<.*?>)\s*(<.*?>)')

flist = [pattern.findall(line) for line in f]
for k, v in flist:
    fdict.update({k: v})
0 голосов
/ 17 мая 2019

Я бы предложил использовать регулярные выражения.Использование следующего сопоставления с шаблоном даст вам список сопоставляемых шаблонов, заключенный в '<>' для каждой строки.

    import re

    pattern = re.compile(r'<.*?>')
    flist = pattern.findall(line) # sample output of flist = ['<lang:Foreign>', '<lang:foreign>']
    if len(flist) == 2:
        fdict.update({flist[0]: flist[1]})
0 голосов
/ 17 мая 2019

Я бы предложил разделить "> <", а затем добавить ">" и "<" обратно к первому и второму элементам массива.Как то так ... </p>

arr = line.split('> <')
arr[0] = arr[0] + '>'
arr[1] = '<' + arr[1]
0 голосов
/ 17 мая 2019

Просто используйте другой аргумент split.Это должно работать для вас:

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