Форум сайта python.su
0
По задумке, чтобы сразу взять элемент с нужным индексом. Иначе пришлось бы после каждой успешной проверки на вхождение резать строку по пробелам, чтобы вынут название города, района, или улицы.
Отредактировано bystander (Окт. 2, 2013 18:18:51)
Офлайн
33
bystanderу тебя как минимум в самом начале ошибка:
Просто пытаюсь понять, где допустил ошибку я
o = "город" a = "ПГТ"
a = line.split(' ')
if o or a in str(a_line): #Если строка содержит "город" или "ПГТ"
Отредактировано Budulianin (Окт. 2, 2013 18:23:25)
Офлайн
221
bismigalisлучше уж
bystander
if o in str(a_line) or a in str(a_line):
вот так правильно
if str(a_line) in (o, a):
Офлайн
47
JOHN_16не это не то
лучше уж
if str(a_line) in (o, a):
line = 'город Красноярск' line_words = line.split() if {'город','пгт'}.intersection(line_words): print(True)
Отредактировано bismigalis (Окт. 5, 2013 11:43:41)
Офлайн
0
Спасибо за советы, скрипт заработал. Только вот теперь он добавляет вообще все улицы к вообще всем районам. Видимо потому, что когда я добавляю новый элемент во вложенный словарь, я не указываю, к какому из ключей я его добавляю, поэтому все строки записываются везде.
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)
Отредактировано bystander (Окт. 3, 2013 15:24:35)
Офлайн