迭代字符串

时间:2017-05-16 17:17:26

标签: python dictionary range

设置向上

使用Scrapy,我正在抓住住房广告。根据住房广告,我获得了邮政编码。

我有一个字典,将邮政编码与地区联系起来,

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

可以查看整个字典here

列表中的每两个后续邮政编码形成一个范围 - 第一个邮政编码是范围的最小值,第二个邮政编码是最大值。

E.g。

中的任何邮政编码

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

属于地区'A'

我的目标是通过邮政编码和字典将广告与地区匹配。

问题

我已经问过上一个问题here并选择按照此answer来解决问题。

因此,我使用以下代码将广告与地区匹配,

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)   

对于某些邮政编码,这是有效的。但是,许多邮政编码不匹配。 1035CK1072LL1059EC是无与伦比的,仅举几例。

有什么问题?是字典还是代码?

我已经对字典进行了排序。

1 个答案:

答案 0 :(得分: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

假设邮政区域没有重叠范围。如果不是这样,那么您需要删除:

else:
    return None