2017-05-16 4 views
2

Set-upIterieren durch Bereich zwischen Saiten

Mit Scrapy, ich Schaben Wohnungsanzeigen. Pro Wohnungsanzeige erhalte ich eine Postleitzahl. Postleitzahlen Bezirke

ein Wörterbuch haben Verknüpfung

postal_district = {'A': ['1011AB', '1011BD', '1011BG', '1011CE', 
         '1011CH', '1011CZ', '1011DB', '1011DD']} 

Das gesamte Wörterbuch kann here angezeigt werden.

Jeweils zwei aufeinanderfolgende Postleitzahlen in der Liste bilden einen Bereich - die erste Postleitzahl ist die Min des Bereichs, die zweite Postleitzahl ist der max.

z. jede Postleitzahl in

'1011AB', '1011AC',...,'1011AZ', '1011BA',...,'1011BD'

gehört 'A' zu Bezirk.

Mein Ziel ist es, Anzeigen über die Postleitzahl und das Wörterbuch den Distrikten zuzuordnen.


Problem

Ich habe eine vorhergehende Frage here gefragt und haben diese answer zu lösen, das Problem zu folgen gewählt.

So ich bin mit dem folgenden Code, um die Anzeigen auf die Bezirke entsprechen,

def is_in_postcode_range(current_postcode, min, max): 
    return min <= current_postcode <= max 

def get_district_by_post_code(postcode): 
    for district, codes in postal_district.items(): 
     first_code = codes[0] 
     last_code = codes[-1] 
     if is_in_postcode_range(postcode, first_code, last_code): 
      if any(is_in_postcode_range(postcode, codes[i], codes[i+1]) for i in range(0, len(codes), 2)): 
       return district 
      else: 
       return None 

district = get_district_by_post_code(pc) 

Für einige Postleitzahlen dies funktioniert. Viele Postleitzahlen sind jedoch nicht identisch. 1035CK, 1072LL, 1059EC sind unübertroffen, um nur einige zu nennen.


Was ist los? Ist es das Wörterbuch oder der Code?

Ich habe das Wörterbuch sortiert.

Antwort

1

Dieses Konstrukt:

if is_in_postcode_range(postcode, first_code, last_code): 
    if any(is_in_postcode_range(postcode, codes[i], codes[i+1]) 
      for i in range(0, len(codes), 2)): 
     return district 
    else: 
     return None 

Geht davon aus, dass die Postbezirke haben keine überlappenden Bereiche. Wenn das nicht stimmt, dann müssen Sie entfernen:

else: 
    return None 
+0

Ich werde verdammt sein. – LucSpan