2015-07-08 4 views
-1

Попытка разделить мой адрес строки сPython разбить строку со списком слов

apts = {'apt','apartment','unit','spc','space','trlr','lot','A','B','C','D'} 

это могло быть сделано в любое лучший способ, чем

fulladdress.split("apt") 
fulladdress.split("apartment") 
... 
... 

пытался сделать

def split_all(text, dict): 
for i in dict(): 
    text = text.split(i) 
return text 

s = split_all(s,apts) 

"fulladdress = "213 house rd apt 1011" Я хочу получить "213 house rd 1011"

не работает. Мне не хватает чего-то

+0

Вы ищете [цикл] (https://docs.python.org/3.4/tutorial/controlflow.html). – TigerhawkT3

+0

Что такое fulladdress и что вы на самом деле пытаетесь сделать? 'fulladdress.split (" apt ")', если вы не назначили его для какого-либо имени, ничего не делает –

+0

apts - это словарь, а не список ... –

ответ

0

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

Я предполагаю, что apts перечисляет возможные оконечные точки, которые вы определили, где находится конец первой строки. Если это так, то следующий будет прямым решением для вас следовать:

fulladdress = "213 house rd apt 1011" 
apts = ['apt','apartment','unit','spc','space','trlr','lot','A','B','C','D','house'] 
first_part = "" 

for search in apts: 
    index = fulladdress.find(" %s " % search) 

    if index != -1: 
     first_part = fulladdress[:index] 
     break 

print first_part 

Он просто пытается найти один из параметров поиска соответствия и возвращает адрес до этого момента. Код возвращается:

213 house rd 
+0

большое спасибо! Мне было интересно, если это несколько строк, как я могу «пропустить» те, которые не совпадают с apts? Я имею в виду, когда адрес не соответствует списку слов. –

+0

Что такое формат файла? Один адрес на строку? –

+0

Я собираю его из БД, который выглядит просто как 1324 addres apt; если адрес содержит слово в списке, то избавьтесь от остальных, если не просто сохраните его как есть. –

0

Вы можете использовать list comprehension, чтобы разделить его все сразу. Он вернет список, в котором каждый элемент является своего рода разделом с использованием разных ключевых слов в apts.

splits = [fulladdress.split(apt) for apt in apts] 
+0

Поскольку 'apts' - это набор, порядок результатов в' splits' не может быть определен, что не может сделать его простым в использовании. –

0

Вы можете использовать re компиляции шаблона, используя границы слов, вы не можете разделить, как вы разделится на подстроки:

s = "213 house rd apt 1011" 
apts = ['apartment','unit','space',"spc","apt",'trlr','lot','A','B','C','D'] 
import re 
r = re.compile(r"\b|\b".join(apts)) 

print(r.sub("", s)) 
213 house rd 1011 
+0

спасибо, ваш код будет полезен моей другой функции, которую мне нужно выяснить. –

+0

@MinnuP, я не понимаю, как работает ваш принятый ответ, что вы на самом деле пытаетесь сделать? –