Создайте словарь из списка со структурированным шаблоном - PullRequest
0 голосов
/ 02 января 2019

Как я могу получить словарь, как показано ниже, из этого текстового файла:

[Fri Aug 20]
shamooshak 4-0 milan
Tehran 2-0 Ams
Liverpool 0-2 Mes
[Fri Aug 19]
Esteghlal 1-0 perspolise
Paris 2-0 perspolise
[Fri Aug 20]
RahAhan 0-0 milan
[Wed Agu 11]
Munich 3-3 ABC
[Wed Agu 12]
RM 0-0 Tarakto
[Sat Jau 01]
Bayern 2-0 Manchester

Я пробовал понимание списка, для циклов с функцией перечисления.Но я не смог построить этот список.

Мой желаемый словарь: {'[Fri Aug 20]':[shamooshak 4-0 milan, Tehran 2-0 Ams,Liverpool 0-2 Mes],'[Fri Aug 19]':[Esteghlal 1-0 perspolise,Paris 2-0 perspolise] ... и т. Д.

Спасибо за продвинутый

Ответы [ 3 ]

0 голосов
/ 02 января 2019

Использование регулярных выражений (re модуль) и пример текста:

text = '''[Fri Aug 20]
shamooshak 4-0 milan
Tehran 2-0 Ams
Liverpool 0-2 Mes
[Fri Aug 19]
Esteghlal 1-0 perspolise
Paris 2-0 perspolise
[Fri Aug 20]
RahAhan 0-0 milan
[Wed Agu 11]
Munich 3-3 ABC
[Wed Agu 12]
RM 0-0 Tarakto
[Sat Jau 01]
Bayern 2-0 Manchester'''
x = re.findall('\[.+?\][^\[]*',text)
x = [i.split('\n') for i in x]
d = dict()
for i in x:
    d[i[0]] = [j for j in i[1:] if j!='']

Это дает следующий словарь d:

`{'[Fri Aug 20]': ['RahAhan 0-0 milan'], '[Sat Jau 01]': ['Bayern 2-0 Manchester'], '[Fri Aug 19]': ['Esteghlal 1-0 perspolise', 'Paris 2-0 perspolise'], '[Wed Agu 12]': ['RM 0-0 Tarakto'], '[Wed Agu 11]': ['Munich 3-3 ABC']}`

Я упустил из виду, что даты могут повторяться, как указано в mad_, чтобы избежать потери данных, замените цикл for на

for i in x:
    d[i[0]] = []
for i in x:
    d[i[0]] = d[i[0]]+[j for j in i[1:] if j!='']
0 голосов
/ 02 января 2019

A for может быть спасителем здесь

a='''[Fri Aug 20]
shamooshak 4-0 milan
Tehran 2-0 Ams
Liverpool 0-2 Mes
[Fri Aug 19]
Esteghlal 1-0 perspolise
Paris 2-0 perspolise
[Fri Aug 20]
RahAhan 0-0 milan
[Wed Agu 11]
Munich 3-3 ABC
[Wed Agu 12]
RM 0-0 Tarakto
[Sat Jau 01]
Bayern 2-0 Manchester'''
d={}
temp_value=[]
temp_key=''
for i in a.split('\n'):

    if i.startswith('['):
        if temp_key and temp_key in d:
            d[temp_key]=d[temp_key]+temp_value
        elif temp_key:
            d[temp_key]=temp_value

        temp_key=i
        temp_value=[]

    else:
        temp_value.append(i)

print(d)

Выход

{'[Fri Aug 20]': ['shamooshak 4-0 milan', 'Tehran 2-0 Ams', 'Liverpool 0-2 Mes', 'RahAhan 0-0 milan'], '[Fri Aug 19]': ['Esteghlal 1-0 perspolise', 'Paris 2-0 perspolise'], '[Wed Agu 12]': ['RM 0-0 Tarakto'], '[Wed Agu 11]': ['Munich 3-3 ABC']}
0 голосов
/ 02 января 2019

Предполагая, что ваши данные - это строки текста ...

def process_arbitrary_text(text):
    obj = {}
    arr = []
    k = None
    for line in text:
        if line[0] == '[' and line[-1] == ']':
            if k and arr: # omit empty keys?
                obj[k] = arr
            k = line
            arr = []
        else:
            arr.append(line)
    return obj

desired_dict = process_arbitrary_text(text)

Редактировать: поскольку вы редактировали, чтобы сказать, что это текстовый файл, просто включите следующий шаблон

with open('filename.txt', 'r') as file:
    for line in file:
        # do something...or:
    text = file.readlines()
...