structures.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. # -*- coding: utf-8 -*-
  2. """
  3. @author:XuMing(xuming624@qq.com)
  4. @description:
  5. """
  6. from collections import defaultdict
  7. P = 0
  8. C = 1
  9. A = 2
  10. class AddrMap(defaultdict):
  11. """封装 '地名' -> [[相关地址列表], 地名全名] 这种映射结构"""
  12. def __init__(self):
  13. super(AddrMap, self).__init__(lambda: [[], None])
  14. def get_full_name(self, key):
  15. return self[key][1]
  16. def is_unique_value(self, key):
  17. """key所映射到的地址列表中的地址是否唯一"""
  18. if key not in self.keys():
  19. return False
  20. return len(self.get_relational_addrs(key)) == 1
  21. def get_relational_addrs(self, key):
  22. return self[key][0]
  23. def get_value(self, key, pos):
  24. """获得映射的第一个地址, 必须保证该key存在, 不然会出错"""
  25. return self.get_relational_addrs(key)[0][pos]
  26. def append_relational_addr(self, key, pca_tuple, full_name_pos):
  27. self[key][0].append(pca_tuple)
  28. if not self[key][1]:
  29. self[key][1] = pca_tuple[full_name_pos]
  30. class Pca(object):
  31. def __init__(self, province='', city='', area='', province_pos=-1, city_pos=-1, area_pos=-1):
  32. self.province = province
  33. self.city = city
  34. self.area = area
  35. self.province_pos = province_pos
  36. self.city_pos = city_pos
  37. self.area_pos = area_pos
  38. def propertys_dict(self, pos_sensitive):
  39. result = {
  40. "省": self.province,
  41. "市": self.city,
  42. "区": self.area
  43. }
  44. if pos_sensitive:
  45. result["省_pos"] = self.province_pos
  46. result["市_pos"] = self.city_pos
  47. result["区_pos"] = self.area_pos
  48. return result
  49. def __repr__(self):
  50. return str(self.propertys_dict(pos_sensitive=False))