Найти - Пользователи
Полная версия: разбор хитрого списка
Начало » Python для новичков » разбор хитрого списка
1 2
bystander
По задумке, чтобы сразу взять элемент с нужным индексом. Иначе пришлось бы после каждой успешной проверки на вхождение резать строку по пробелам, чтобы вынут название города, района, или улицы.
Budulianin
bystander
Просто пытаюсь понять, где допустил ошибку я
у тебя как минимум в самом начале ошибка:

Присвоил
o = "город"   
a = "ПГТ"

потом переприсвоил

a = line.split(' ')

Но не понял этого
if o or a in str(a_line): #Если строка содержит "город" или "ПГТ"

a уже не равна литералу “ПГТ”, a это список

Давай переменным нормальные имена, а не буквы
JOHN_16
bismigalis
bystander
if o in str(a_line) or a in str(a_line):


вот так правильно
лучше уж
if str(a_line) in (o, a):
bismigalis
JOHN_16
лучше уж
if str(a_line) in (o, a):
не это не то
ТСу надопроверить вхождение хотя бы одного из нескольких слов в строке


можно так
line = 'город Красноярск'
line_words = line.split()
if {'город','пгт'}.intersection(line_words):
    print(True)
bystander
Спасибо за советы, скрипт заработал. Только вот теперь он добавляет вообще все улицы к вообще всем районам. Видимо потому, что когда я добавляю новый элемент во вложенный словарь, я не указываю, к какому из ключей я его добавляю, поэтому все строки записываются везде.
 tt[str(s_line[:-1])] = ttt
Как выбрать только те улицы, которые относятся к конкретному району? Подозреваю, что в указанной выше строке можно задать ключ вложенного словаря.
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:
    z = line.split(';')
    f = [z[0], z[1], z[2]]
    c.append(f)
  
for a_line in c:
    if o in str(a_line) or a in str(a_line):
        t[str(a_line[:-1])] = tt
        for s_line in c[c.index(a_line) + 1:]:
            if v in str(s_line) or w in str(s_line):
                tt[str(s_line[:-1])] = ttt 
                for n_line in c[c.index(s_line) + 1:]:
                    if m in str(n_line) or n in str(n_line):
                        ttt[str(n_line[:-1])] = n_line[-1]
                    elif g in str(n_line):
                        ttt[str(n_line[:-1])] = n_line[-1]
                    elif v in str(n_line) or w in str(n_line) or o in str(n_line) or a in str(n_line):
                        break
            elif o in str(s_line) or a in str(s_line):
                break
print(t)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB