Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 2, 2013 18:09:38

bystander
Зарегистрирован: 2013-08-12
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

разбор хитрого списка

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

Отредактировано bystander (Окт. 2, 2013 18:18:51)

Офлайн

#2 Окт. 2, 2013 18:19:17

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

разбор хитрого списка

bystander
Просто пытаюсь понять, где допустил ошибку я
у тебя как минимум в самом начале ошибка:

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

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

a = line.split(' ')

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

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

Давай переменным нормальные имена, а не буквы



Отредактировано Budulianin (Окт. 2, 2013 18:23:25)

Офлайн

#3 Окт. 3, 2013 10:40:01

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

разбор хитрого списка

bismigalis
bystander
if o in str(a_line) or a in str(a_line):


вот так правильно
лучше уж
if str(a_line) in (o, a):



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#4 Окт. 3, 2013 11:15:29

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

разбор хитрого списка

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)

Офлайн

#5 Окт. 3, 2013 15:23:55

bystander
Зарегистрирован: 2013-08-12
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

разбор хитрого списка

Спасибо за советы, скрипт заработал. Только вот теперь он добавляет вообще все улицы к вообще всем районам. Видимо потому, что когда я добавляю новый элемент во вложенный словарь, я не указываю, к какому из ключей я его добавляю, поэтому все строки записываются везде.

 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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version