Есть список вида:
город Курганск 128 Октябрьский район 53 ул. Ленина 15 ул. Пушкина 20 пер. Боксёров 0 во дворах и подворотнях 15 Портовый район 68 ул. Набережная 20 пер. портовый 3 пер. швартовый5 во дворах и подворотнях 40 Массив "Дубки" 10 ул. Героев обороны 8 во дворах и подворотнях 2 Город Ивановск (дальше перечисление районов и улиц, как и для прошлого города)
нужно из него сделать таблицу вида:
Курганск Октябрьский ул. Ленина 15 Курганск Октябрьский ул. Пушкина 20 Курганск Октябрьский пер. Лумумбы 3 Курганск Октябрьский во дворах и подворотнях во дворах и подворотнях 15
Для этого был написан скрипт, но он не работает (хотя по отдельности части, вроде, работают). Посмотрите, пожалуйста, в чём проблема:
x = open("C:\\startling_experiments\\data.txt", "r") d = x.read().split('\n') c = [] #Сюда запишется разаобранный список t = {} #Три уровня словарей: общий tt = {} #по городам ttt = {} #по районам o = "город" a = "ПГТ" v = "массив" w = "район" m = "ул." n = "пер." g = "и подворотнях" for line in d: a = line.split(' ') f = [a[0], a[1], a[2]] #[город], [Курганск] [128] или [ул.] [Пушкина] [20] или[во дворах][и подворотнях][15] c.append(f) for a_line in c: if o or a in str(a_line): #Если строка содержит "город" или "ПГТ" t[str(a_line[:-1])] = tt #то создаём ключ, например, город Курганск for s_line in c[c.index(a_line) + 1:]: #и со следующей строки if v or w in str(s_line): #Если строка содержит "район" или "массив" tt[str(s_line[:-2])] = ttt #внутри основного словаря добавляем словарь с ключем Октябрьский for n_line in c[c.index(s_line) + 1:]: #и со следующей строки if m or n in str(n_line): # если в строке "ул." или "пер." ttt[str(n_line[:-1])] = n_line[-1] #ул. пушкина:20 elif g in str(n_line): # если "и подворотнях" ttt[str(n_line[:-1])] = n_line[-1] #во дворах и подворотнях:15 elif v or w or o or a in str(n_line): #прерываем цикл поиска улиц, если встречаем новый район или город break elif o or a in str(s_line): #прерываем цикл поиска районов, если находим новый город break print(t)
И можно ли сделать это проще?