diff --git a/DS-using-python/BST b/DS-using-python/BST new file mode 100644 index 0000000..55cb53f --- /dev/null +++ b/DS-using-python/BST @@ -0,0 +1,140 @@ +class BinaryTree(): + def __init__(self, val, parent = None, left = None, right = None): + self.parent = parent + self.value = val + self.left = left + self.right = right + +def Recur_Search(root, val): + if root.value == None or root.value == val: + return root + if val < root.value: + return recur_search(root.left, val) + else: + return recur_search(root.right, val) + +def Iter_Search(root, val): + while root.value != None and val != root.value: + if val < root.value: + root = root.left + else: + root = root.right + return root + +def MinofTree(root): + while root.left != None: + root = root.left + return root + +def Recur_MinofTree(root): + if root == None or root.left == None: + return root + else: + return Recur_MinofTree(root.left) + +def MaxofTree(root): + while root.right != None: + root = root.right + return root + +def Recur_MaxofTree(root): + if root == None or root.right == None: + return root + else: + return Recur_MaxofTree(root.right) + +def InorderTreeWalk(root): + if root != None: + InorderTreeWalk(root.left) + print(root.value, end=' ' ) + InorderTreeWalk(root.right) + +# if the right subtree of node is nonempty, then the Successor +# of x is the leftmost node in the right subtree, if the right +# subtree of node is empty and x has a Successor y, then y is the +# lowest ancestor of x whose left child is also an ancestor of x +def Successor(root): + if root.right != None: + return MinofTree(root.right) + suc = root.parent + while suc != None and root == suc.right: + root = suc + suc = suc.parent + return suc + +def Predecessor(root): + if root.left != None: + return MaxofTree(root.right) + pre = root.parent + while pre != None and root == pre.left: + root = pre + pre = pre.left + return pre + +#def Recur_Insert(root, val): +# if root == None: +# key = BinaryTree(val) +# root = key +# elif val < root.value: +# Recur_Insert(root.left, val) +# print('left') +# print(root.left) +# else: +# Recur_Insert(root.right, val) +# print('right') + +def TreeInsert(root, val): + key = BinaryTree(val) + p = None + while root != None: + p = root + if key.value < root.value: + root = root.left + else: + root = root.right + key.parent = p + if p == None: + root = key + elif key.value < p.value: + p.left = key + else: + p.right = key + +def TreeDelete(root, val): + key = Iter_Search(root, val) + if key == None: + return None + d = None + if key.left == None or key.right == None: + d = key + else: + d = Successor(key) + if d.left != None: + cd = d.left + else: + cd = d.right + if cd != None: + cd.parent = d.parent + if d.parent == None: + root = cd + elif d == d.parent.left: + d.parent.left = x + else: + d.parent.right = x + if d != key: + key.value = d.value + return d + +L = [3, 5, 6, 7, 10, 12, 13, 16, 18, 20, 23] +root = BinaryTree(15) +for i in L: +# Recur_Insert(root, i) + TreeInsert(root, i) +InorderTreeWalk(root) +print(root.left.value) +print(Successor(root.left).value) +print(Predecessor(root.left.right).value) +print(MinofTree(root).value) +print(MaxofTree(root).value) +print(Recur_MinofTree(root).value) +print(Recur_MaxofTree(root).value) diff --git a/DS-using-python/bubblesort b/DS-using-python/bubblesort new file mode 100644 index 0000000..fab92d2 --- /dev/null +++ b/DS-using-python/bubblesort @@ -0,0 +1,37 @@ +L1 = [5, 2, 7, 4, 6, 3, 1] + +def bubblesort1(seq): + print(seq) + n = len(seq) + itr1= 0 + + while(n > 1): + for j in range(n-1): + if seq[j] > seq[j+1]: + seq[j], seq[j+1] = seq[j+1], seq[j] + itr1= itr1+ 1 + print("iter: %d " %itr1) + print(seq) + n = n-1 + +bubblesort1(L1) + +L2 = [5, 2, 7, 4, 6, 3, 1] + +def bubblesort2(seq): + print(seq) + iSorted = False + n = len(seq) + itr2 = 0 + + while(iSorted == False): + iSorted = True + for i in range(n-1): + if seq[i] > seq[i+1]: + seq[i], seq[i+1] = seq[i+1], seq[i] + iSorted = False + itr2 = itr2+ 1 + print("iter: %d" %itr2) + print(seq) + +bubblesort2(L2) diff --git a/DS-using-python/countingsort b/DS-using-python/countingsort new file mode 100644 index 0000000..4672c2a --- /dev/null +++ b/DS-using-python/countingsort @@ -0,0 +1,22 @@ +def countingsort(seq, k): + L = [0 for i in range(k+1)] + res = [0 for i in range(len(seq))] + + for i in range(len(seq)): + L[seq[i]] = L[seq[i]] + 1 + print L + + for i in range(1, k+1): + L[i] = L[i] + L[i-1] + print L + + i = len(seq)-1 + while i >= 0: + res[L[seq[i]]-1] = seq[i] + L[seq[i]] -= 1 + i -= 1 + return res + +seq1 = [6, 0, 2, 0, 1, 3, 4, 6, 1, 3, 2] +seq = [2, 5, 3, 0, 2, 3, 0, 3] +print(countingsort(seq1, 6)) diff --git a/DS-using-python/heap b/DS-using-python/heap new file mode 100644 index 0000000..1286c18 --- /dev/null +++ b/DS-using-python/heap @@ -0,0 +1,107 @@ +class BinHeap(): + def __init__(self): + self.heaplist = [0] + self.heapsize = 0 + def Left(self, i): + return 2*i + def Right(self, i): + return 2*i+1 + def Parent(self, i): + return i // 2 + + def Max_Heapify(self, i): + l = self.Left(i) + r = self.Right(i) + largest = i + if l <= self.heapsize and self.heaplist[i] < self.heaplist[l]: + largest = l + if r <= self.heapsize and self.heaplist[largest] < self.heaplist[r]: + largest = r + if largest != i: + self.heaplist[i], self.heaplist[largest] = self.heaplist[largest], self.heaplist[i] + self.Max_Heapify(largest) + + def Min_Heapify(self, i): + p = self.Parent(i) + if p > 0 and self.heaplist[i] < self.heaplist[p]: + self.heaplist[i], self.heaplist[p] = self.heaplist[p], self.heaplist[i] + if p > 1: + self.Min_Heapify(p) + + def BuildMaxHeap(self,seq): + self.heapsize = len(seq) + self.heaplist = [0] + seq[:] + i = self.heapsize // 2 + while i > 0: + self.Max_Heapify(i) + i -= 1 + + def BuildMinHeap(self, seq): + self.heapsize = len(seq) + self.heaplist = [0] + seq[:] + i = self.heapsize // 2 + while i <= self.heapsize : + self.Min_Heapify(i) + i += 1 + + def HeapSort(self, seq): + self.BuildMaxHeap(seq) + i = self.heapsize + while i > 0: + self.heaplist[1], self.heaplist[i] = self.heaplist[i], self.heaplist[1] + seq[i-1] = self.heaplist[i] + self.heapsize -= 1 + self.Max_Heapify(1) + i -= 1 + return seq + + def HeapExtractMax(self): + if self.heapsize < 1: + return 0 + maxele, self.heaplist[1] = self.heaplist[1], self.heaplist[self.heapsize] + self.heapsize -= 1 + self.Max_Heapify(1) + return maxele + + def Heap_Increase_Key(self, i, key): + if key < self.heaplist[i]: + return + self.heaplist[i] = key + while i > 1 and self.heaplist[self.Parent(i)] < self.heaplist[i]: + self.heaplist[i], self.heaplist[self.Parent(i)] = self.heaplist[self.Parent(i)], self.heaplist[i] + i = self.Parent(i) + + def Max_Heap_Insert(self, key): + self.heapsize += 1 + self.heaplist.append(0) + self.Heap_Increase_Key(self.heapsize, key) + + +print("test max_heapify") +arr = [5, 13, 2, 25, 7, 17, 20, 8, 4] +bh1 = BinHeap() +bh1.BuildMaxHeap(arr) +print(bh1.heaplist) +bh1.Max_Heap_Insert(30) +print(bh1.heaplist) +print(bh1.HeapExtractMax()) +#print(bh1.HeapSort(arr)) +#bh1.BuildMinHeap(arr) + +arr = [16, 4, 10, 14, 7, 9, 3, 2, 8, 1] +bh2 = BinHeap() +#print(bh2.HeapSort(arr)) +bh2.BuildMaxHeap(arr) +print(bh1.heaplist) +bh2.Max_Heap_Insert(30) +print(bh2.heaplist) +print(bh2.HeapExtractMax()) +#print(bh2.heaplist) +#bh2.BuildMinHeap(arr) + +arr = [5, 3, 17, 10, 84, 19, 6, 22, 9] +bh3 = BinHeap() +bh3.BuildMaxHeap(arr) +print(bh3.heaplist) +bh3.BuildMinHeap(arr) +print(bh3.heaplist) diff --git a/DS-using-python/insertionsort.py b/DS-using-python/insertionsort.py new file mode 100644 index 0000000..7ae6dfa --- /dev/null +++ b/DS-using-python/insertionsort.py @@ -0,0 +1,22 @@ +def insertionsort(seq): + i = 1 + while i < len(seq): + key = seq[i] + j = i - 1 + while j >= 0 and seq[j] > key: + seq[j+1] = seq[j] + j = j-1 + seq[j+1] = key + i = i + 1 + +L = [5,2,4,6,1,3] +L2 = [10, 4, 7, 19, 2, 11] +print(L) +insertionsort(L) +print(L) +print(L2) +insertionsort(L2) +print(L2) +print(L) +insertionsort(L) +print(L) diff --git a/DS-using-python/medianoftwosortedarray.py b/DS-using-python/medianoftwosortedarray.py new file mode 100644 index 0000000..ac81a31 --- /dev/null +++ b/DS-using-python/medianoftwosortedarray.py @@ -0,0 +1,69 @@ +import sys +import random + + +def findMedian1(v1, v2): + v = [] + i = 0 + j = 0 + vlen = len(v1)+len(v2) + while i < len(v1) and j < len(v2): + if v1[i] < v2[j]: + v.append(v1[i]) + i += 1 + else: + v.append(v2[j]) + j += 1 + v += v1[i:] + v += v2[j:] + if vlen % 2 == 1 or vlen == 1: + return v[vlen//2] + else: + return (v[vlen//2]+v[vlen//2 -1])/2 + + +def findKth(v1, v2, k): + len1, len2 = len(v1), len(v2) + if len1 == 0: + return v2[k-1] + if len2 == 0: + return v1[k-1] + if k == 1: + return min(v1[0], v2[0]) + + key1, key2 = sys.maxsize, sys.maxsize + if k//2 - 1 < len1: + key1 = v1[k//2 - 1] + if k//2 - 1 < len2: + key2 = v2[k//2 - 1] + if key1 < key2: + return findKth(v1[k//2:], v2, k - k//2) + else: + return findKth(v1, v2[k//2:], k - k//2) + +def findMedian2(v1, v2): + len1, len2 = len(v1), len(v2) + if (len1+len2)% 2 == 1: + return findKth(v1, v2, (len1+len2)//2+1) + else: + return (findKth(v1, v2, (len1+len2)//2) + findKth(v1, v2, (len1+len2)//2+1))/2 + +def stressTesting(): + while True: + a = random.randint(50, 100) + b = random.randint(2, 50) + L1, L2 = [], [] + for i in range(a): + L1.append(random.randrange(1, a)) + for i in range(b): + L2.append(random.randrange(1, b)) + L1.sort() + L2.sort() + print(L1) + print(L2) + print(findMedian1(L1, L2)) + print(findMedian2(L1, L2)) + if findMedian1(L1, L2) != findMedian2(L1, L2): + break + +stressTesting() diff --git a/DS-using-python/mergesort b/DS-using-python/mergesort new file mode 100644 index 0000000..9ba1932 --- /dev/null +++ b/DS-using-python/mergesort @@ -0,0 +1,28 @@ +L= [6, 3, 2, 7, 1, 5, 8, 4] + +def mergesort(seq): + if(len(seq) < 2): + return seq + mid = len(seq)//2 + Leftlist = mergesort(seq[:mid]) + print(Leftlist) + Rightlist = mergesort(seq[mid:]) + print(Rightlist) + return merge(Leftlist, Rightlist) + +def merge(seq1, seq2): + seq = [] + i, j = 0, 0 + while i < len(seq1) and j < len(seq2): + if seq1[i] <= seq2[j]: + seq.append(seq1[i]) + i = i + 1 + else: + seq.append(seq2[j]) + j = j + 1 + seq = seq + seq1[i:] + seq = seq + seq2[j:] + return seq + +L1 = mergesort(L) +print(L1) diff --git a/DS-using-python/quicksort b/DS-using-python/quicksort new file mode 100644 index 0000000..732eb31 --- /dev/null +++ b/DS-using-python/quicksort @@ -0,0 +1,26 @@ +def quicksort(seq): + quicksortsec(seq, 0, len(seq)-1) + + +def quicksortsec(seq, p, r): + if p < r: + q = partition(seq, p, r) + quicksortsec(seq, p, q-1) + quicksortsec(seq, q+1, r) + +def partition(seq, p, r): + key = seq[r] + i = p-1 + j = p + while j <= r-1 and j >= p: + if seq[j] <= key: + i = i+1 + seq[i], seq[j] = seq[j], seq[i] + j += 1 + seq[i+1], seq[r] = seq[r], seq[i+1] + print(i+1) + return i+1 + +L = [2, 8, 7, 1, 3, 5, 6, 4] +quicksort(L) +print(L) diff --git a/DS-using-python/stack b/DS-using-python/stack new file mode 100644 index 0000000..170971f --- /dev/null +++ b/DS-using-python/stack @@ -0,0 +1,92 @@ +class Stack(): + + def __init__(self): + self.vec = [] + def push(self, item): + self.vec.append(item) + + def pop(self): + self.vec.pop() + + def top(self): + return self.vec[len(self.vec) - 1] + + def is_empty(self): + return self.vec == [] + + def size(self): + return len(self.vec) + +''' +#convert num to different base +def convert1(stk, num, base): + digit = ['0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'] + if num > 0: + stk.push(digit[num % base]) + convert(stk, num // base, base) + +def convert2(stk, num, base): + digit = ['0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'] + while num > 0: + stk.push(digit[num % base]) + num = num // base + + +s = Stack() +n= [] +convert2(s, 12345, 8) +while s.is_empty() == False: + n.append(s.top()) + s.pop() +print(n) +''' + +#stack permutation +def permutationstacks(stk1, stk2): + tmp1 = Stack() + tmp2 = Stack() + while stk2.is_empty() == False: + tmp2.push(stk2.top()) + stk2.pop() + + while stk1.is_empty() == False or (tmp1.is_empty() == False and tmp1.top() == tmp2.top()): + if tmp1.is_empty() == False and tmp1.top() == tmp2.top(): + stk2.push(tmp1.top()) + tmp1.pop() + tmp2.pop() + else: + tmp1.push(stk1.top()) + stk1.pop() +# print(stk1.vec) +# print(tmp1.vec) +# print(tmp2.vec) +# print('\n') + if stk1.is_empty() == True and tmp1.is_empty() == True: + return True + return False + +def permutationstk(): + s = Stack() + s.vec = [4, 3, 2, 1] + s1 = Stack() + s1.vec = [3, 2, 4, 1] + s2 = Stack() + s2.vec = [1, 2, 3, 4] + print(permutationstacks(s, s1)) + print(permutationstacks(s, s2)) + +''' +s = Stack() +print(s.is_empty()) +s.push(4) +s.push('dog') +print(s.top()) +print(s.size()) +s.pop() +s.top() +print(s.size()) +''' +if __name__ == '__main__': + permutationstk() diff --git a/scrapy/doubanlist.py b/scrapy/doubanlist.py new file mode 100644 index 0000000..1e106c8 --- /dev/null +++ b/scrapy/doubanlist.py @@ -0,0 +1,41 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +from bs4 import BeautifulSoup +import requests + +url = 'https://www.douban.com/doulist/176513/' +url_data = requests.get(url) +soup = BeautifulSoup(url_data.text, 'lxml') +titles = soup.select('div.title > a') +imgs = soup.select('img[width="100"]') +rates = soup.select('div.rating > span.rating_nums') +authors = soup.select('div.abstract') +comments = soup.select('div.comment-item.content > blockquote') +#for title in titles: + #print title.get_text().strip() + ' rate:' + rate.get_text().strip() +L = [] +for title, rate, author in zip(titles, rates, authors): + data = { + 'title': title.get_text().strip(), + 'rate': rate.get_text().strip(), + 'author':author.get_text().strip().replace(' ', '*'), + # 'comment':comment.get_text().strip() + } + print data + +''' +for title, img, rate, author, comment in zip(titles, imgs, rates, authors, comments): + data = { + title: title.get_text(), + img: img.get('src'), + rate: rate.get_text(), + author:author.get_text(), + comment: comment.get_text() + } +''' +#print(titles,imgs,rates) +#*[@id="item1167928"]/div/div[2]/div[6]/text()[1] +#item1167946 > div > div.bd.doulist-subject > div.abstract +#item1167946 > div > div.ft > div.comment-item.content > blockquote +#item1167946 > div > div.bd.doulist-subject > div.rating > span.rating_nums +#item1167946 > div > div.bd.doulist-subject > div.title > a diff --git a/scrapy/trainstation/parsestation.py b/scrapy/trainstation/parsestation.py new file mode 100644 index 0000000..4f0b3a9 --- /dev/null +++ b/scrapy/trainstation/parsestation.py @@ -0,0 +1,19 @@ +#coding: utf-8 + +import re +import requests +from pprint import pprint +import urllib3 + +inputfile = 'station.txt' +text = '' +with open(inputfile, 'r') as infile: + for line in infile: + text += line +#url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.8955' +#text = requests.get(url, verify=False) +#print(text) +stations = re.findall(r'([A-Z]+)\|([a-z]+)', text) +stations = dict(stations) +stations = dict(zip(stations.values(), stations.keys())) +pprint(stations, indent = 4) diff --git a/scrapy/trainstation/station b/scrapy/trainstation/station new file mode 100644 index 0000000..e33d64f --- /dev/null +++ b/scrapy/trainstation/station @@ -0,0 +1,2528 @@ +stations = { + 'acheng': 'ACB', + 'aershan': 'ART', + 'aershanbei': 'ARX', + 'aihe': 'AHP', + 'aijiacun': 'AJJ', + 'ajin': 'AJD', + 'akesu': 'ASR', + 'aketao': 'AER', + 'alashankou': 'AKR', + 'alihe': 'AHX', + 'alongshan': 'ASX', + 'amuer': 'JTX', + 'ananzhuang': 'AZM', + 'anda': 'ADX', + 'ande': 'ARW', + 'anding': 'ADP', + 'angangxi': 'AAX', + 'anguang': 'AGT', + 'anhua': 'PKQ', + 'anjia': 'AJB', + 'ankang': 'AKY', + 'ankouyao': 'AYY', + 'anlong': 'AUZ', + 'anlu': 'ALN', + 'anping': 'APT', + 'anqing': 'AQH', + 'anqingxi': 'APH', + 'anren': 'ARG', + 'anshan': 'AST', + 'anshanxi': 'AXT', + 'anshun': 'ASW', + 'anshunxi': 'ASE', + 'antang': 'ATV', + 'antingbei': 'ASH', + 'antu': 'ATL', + 'antuxi': 'AXL', + 'anxi': 'AXS', + 'anyang': 'AYF', + 'anyangdong': 'ADF', + 'aojiang': 'ARH', + 'aolibugao': 'ALD', + 'atushi': 'ATR', + 'babu': 'BBE', + 'bachu': 'BCR', + 'badaling': 'ILP', + 'badong': 'BNN', + 'baibiguan': 'BGV', + 'baicheng': 'BCT', + 'baigou': 'FEP', + 'baiguo': 'BGM', + 'baihe': 'BEL', + 'baihedong': 'BIY', + 'baihexian': 'BEY', + 'baijian': 'BAP', + 'baijigou': 'BJJ', + 'baijipo': 'BBM', + 'baikuipu': 'BKB', + 'bailang': 'BRZ', + 'bailixia': 'AAP', + 'baimajing': 'BFQ', + 'baiqi': 'BQP', + 'baiquan': 'BQL', + 'baise': 'BIZ', + 'baisha': 'BSW', + 'baishanshi': 'HJL', + 'baishapo': 'BPM', + 'baishishan': 'BAL', + 'baishuijiang': 'BSY', + 'baishuixian': 'BGY', + 'baishuizhen': 'BUM', + 'baiyangdian': 'FWP', + 'baiyi': 'FHW', + 'baiyinchagan': 'BYC', + 'baiyinhuanan': 'FNC', + 'baiyinhushuo': 'BCD', + 'baiyinshi': 'BNJ', + 'baiyintala': 'BID', + 'baiyinxi': 'BXJ', + 'baiyunebo': 'BEC', + 'bajiaotai': 'BTD', + 'balin': 'BLX', + 'bamiancheng': 'BMD', + 'bamiantong': 'BMB', + 'bancheng': 'BUP', + 'banmaoqing': 'BNM', + 'bantian': 'BTQ', + 'baodi': 'BPP', + 'baoding': 'BDP', + 'baodingdong': 'BMP', + 'baohuashan': 'BWH', + 'baoji': 'BJY', + 'baojinan': 'BBY', + 'baokang': 'BKD', + 'baolage': 'BQC', + 'baolin': 'BNB', + 'baolongshan': 'BND', + 'baoqing': 'BUB', + 'baoquanling': 'BQB', + 'baotou': 'BTC', + 'baotoudong': 'BDC', + 'bashan': 'BAY', + 'baxiantong': 'VXD', + 'bayangaole': 'BAC', + 'bayuquan': 'BYT', + 'bazhong': 'IEW', + 'bazhongdong': 'BDE', + 'bazhou': 'RMP', + 'bazhouxi': 'FOP', + 'beian': 'BAB', + 'beibei': 'BPW', + 'beidaihe': 'BEP', + 'beihai': 'BHZ', + 'beijiao': 'IBQ', + 'beijing': 'BJP', + 'beijingbei': 'VAP', + 'beijingdong': 'BOP', + 'beijingnan': 'VNP', + 'beijingxi': 'BXP', + 'beijingzi': 'BRT', + 'beiliu': 'BOZ', + 'beimaquanzi': 'BRP', + 'beipiaonan': 'RPD', + 'beitai': 'BTT', + 'beitun': 'BYP', + 'beitunshi': 'BXR', + 'beiying': 'BIV', + 'beiyinhe': 'BYB', + 'beizhai': 'BVP', + 'bencha': 'FWH', + 'bengbu': 'BBH', + 'bengbunan': 'BMH', + 'benhong': 'BVC', + 'benxi': 'BXT', + 'benxihu': 'BHT', + 'benxixincheng': 'BVT', + 'bijiang': 'BLQ', + 'bijiashan': 'BSB', + 'bijiguan': 'BJM', + 'binhai': 'FHP', + 'binhaibei': 'FCP', + 'binjiang': 'BJB', + 'binxian': 'BXY', + 'binyang': 'UKZ', + 'binzhou': 'BIK', + 'bishan': 'FZW', + 'boao': 'BWQ', + 'bobai': 'BBZ', + 'boketu': 'BKX', + 'bole': 'BOR', + 'boli': 'BLB', + 'botou': 'BZP', + 'boxing': 'BXK', + 'bozhou': 'BZH', + 'buhai': 'BUT', + 'buliekai': 'BLR', + 'caijiagou': 'CJT', + 'caijiapo': 'CJY', + 'caishan': 'CON', + 'cangnan': 'CEH', + 'cangshi': 'CST', + 'cangxi': 'CXE', + 'cangzhou': 'COP', + 'cangzhouxi': 'CBP', + 'caohai': 'WBW', + 'caohekou': 'CKT', + 'caoshi': 'CSL', + 'caoxian': 'CXK', + 'caozili': 'CFP', + 'ceheng': 'CHZ', + 'cenxi': 'CNZ', + 'chabuga': 'CBC', + 'chaigang': 'CGT', + 'chaigoupu': 'CGV', + 'chaihe': 'CHB', + 'chajiang': 'CAM', + 'chaka': 'CVO', + 'chaling': 'CDG', + 'chalingnan': 'CNG', + 'changcheng': 'CEJ', + 'changchong': 'CCM', + 'changchun': 'CCT', + 'changchunnan': 'CET', + 'changchunxi': 'CRT', + 'changde': 'VGQ', + 'changdian': 'CDT', + 'changge': 'CEF', + 'changle': 'CLK', + 'changli': 'CLP', + 'changlingzi': 'CLT', + 'changlinhe': 'FVH', + 'changnong': 'CNJ', + 'changping': 'CPP', + 'changpingbei': 'VBP', + 'changpingdong': 'FQQ', + 'changpoling': 'CPM', + 'changqingqiao': 'CQJ', + 'changsha': 'CSQ', + 'changshanan': 'CWQ', + 'changshantun': 'CVT', + 'changshou': 'EFW', + 'changshoubei': 'COW', + 'changshouhu': 'CSE', + 'changting': 'CES', + 'changtingnan': 'CNS', + 'changtingzhen': 'CDB', + 'changtu': 'CTT', + 'changtuxi': 'CPT', + 'changwu': 'CWY', + 'changxing': 'CBH', + 'changxingnan': 'CFH', + 'changyang': 'CYN', + 'changyuan': 'CYF', + 'changzheng': 'CZJ', + 'changzhi': 'CZF', + 'changzhibei': 'CBF', + 'changzhou': 'CZH', + 'changzhoubei': 'ESH', + 'changzhuang': 'CVK', + 'chaohu': 'CIH', + 'chaohudong': 'GUH', + 'chaolianggou': 'CYP', + 'chaoshan': 'CBQ', + 'chaoyang': 'CNQ', + 'chaoyangchuan': 'CYL', + 'chaoyangdi': 'CDD', + 'chaoyangzhen': 'CZL', + 'chaozhou': 'CKQ', + 'chasuqi': 'CSC', + 'chengcheng': 'CUY', + 'chengde': 'CDP', + 'chengdedong': 'CCP', + 'chengdu': 'CDW', + 'chengdudong': 'ICW', + 'chengdunan': 'CNW', + 'chenggaozi': 'CZB', + 'chenggu': 'CGY', + 'chengjisihan': 'CJX', + 'chenguanying': 'CAJ', + 'chengyang': 'CEK', + 'chengzitan': 'CWT', + 'chenming': 'CMB', + 'chenqing': 'CQB', + 'chenxi': 'CXQ', + 'chenxiangtun': 'CXT', + 'chenzhou': 'CZQ', + 'chenzhouxi': 'ICQ', + 'chezhuanwan': 'CWM', + 'chibi': 'CBN', + 'chibibei': 'CIN', + 'chifeng': 'CFD', + 'chifengxi': 'CID', + 'chizhou': 'IYH', + 'chongqing': 'CQW', + 'chongqingbei': 'CUW', + 'chongqingnan': 'CRW', + 'chongren': 'CRG', + 'chongzuo': 'CZZ', + 'chuangyecun': 'CEX', + 'chunwan': 'CQQ', + 'chunyang': 'CAL', + 'chushan': 'CSB', + 'chuxiong': 'COM', + 'chuzhou': 'CXH', + 'chuzhoubei': 'CUH', + 'cili': 'CUQ', + 'cishan': 'CSP', + 'cixi': 'CRP', + 'cixian': 'CIP', + 'ciyao': 'CYK', + 'congjiang': 'KNW', + 'cuihuangkou': 'CHP', + 'cuogang': 'CAX', + 'daan': 'RAT', + 'daanbei': 'RNT', + 'daba': 'DBJ', + 'daban': 'DBC', + 'dachaigou': 'DGJ', + 'dacheng': 'DCT', + 'dadenggou': 'DKJ', + 'dafangnan': 'DNE', + 'daguan': 'RGW', + 'daguantun': 'DTT', + 'dagushan': 'RMT', + 'dahongqi': 'DQD', + 'dahuichang': 'DHP', + 'dahushan': 'DHD', + 'dailing': 'DLB', + 'daixian': 'DKV', + 'daiyue': 'RYV', + 'dajiagou': 'DJT', + 'dajian': 'DFP', + 'daju': 'DIM', + 'dakoutun': 'DKP', + 'dalateqi': 'DIC', + 'dalatexi': 'DNC', + 'dali': 'DKM', + 'dalian': 'DLT', + 'dalianbei': 'DFT', + 'dalin': 'DLD', + 'daluhao': 'DLC', + 'dandong': 'DUT', + 'dandongxi': 'RWT', + 'danfeng': 'DGY', + 'dangshan': 'DKH', + 'dangshannan': 'PRH', + 'dangtudong': 'OWH', + 'dangyang': 'DYN', + 'dani': 'DNZ', + 'dantu': 'RUH', + 'danxiashan': 'IRQ', + 'danyang': 'DYH', + 'danyangbei': 'EXH', + 'daobao': 'RBT', + 'daoerdeng': 'DRD', + 'daoqing': 'DML', + 'daozhou': 'DFZ', + 'dapanshi': 'RPP', + 'dapingfang': 'DPD', + 'dapu': 'DVT', + 'daqilaha': 'DQX', + 'daqing': 'DZX', + 'daqingdong': 'LFX', + 'daqinggou': 'DSD', + 'daqingxi': 'RHX', + 'dashiqiao': 'DQT', + 'dashitou': 'DSL', + 'dashitounan': 'DAL', + 'dashizhai': 'RZT', + 'datianbian': 'DBM', + 'datong': 'DTV', + 'datongxi': 'DTO', + 'datun': 'DNT', + 'dawang': 'WWQ', + 'dawangtan': 'DZZ', + 'dawanzi': 'DFM', + 'dawukou': 'DFJ', + 'daxing': 'DXX', + 'daxinggou': 'DXL', + 'dayan': 'DYX', + 'dayangshu': 'DUX', + 'dayebei': 'DBN', + 'daying': 'DYV', + 'dayingdong': 'IAW', + 'dayingzhen': 'DJP', + 'dayingzi': 'DZD', + 'dayu': 'DYG', + 'dayuan': 'DYZ', + 'dazhanchang': 'DTJ', + 'dazhangzi': 'DAP', + 'dazhou': 'RXW', + 'dazhuyuan': 'DZY', + 'dazunan': 'FQW', + 'dean': 'DAG', + 'debao': 'RBZ', + 'debosi': 'RDT', + 'dechang': 'DVW', + 'deerbuer': 'DRX', + 'dehui': 'DHT', + 'dehuixi': 'DXT', + 'delingha': 'DHO', + 'dengshahe': 'DWT', + 'dengta': 'DGT', + 'dengzhou': 'DOF', + 'deqing': 'DRH', + 'deqingxi': 'MOH', + 'dexing': 'DWG', + 'deyang': 'DYW', + 'dezhou': 'DZP', + 'dezhoudong': 'DIP', + 'dianjiang': 'DJE', + 'dianxin': 'DXM', + 'didao': 'DDB', + 'dingbian': 'DYJ', + 'dinghudong': 'UWQ', + 'dinghushan': 'NVQ', + 'dingnan': 'DNG', + 'dingtao': 'DQK', + 'dingxi': 'DSJ', + 'dingxiang': 'DXV', + 'dingyuan': 'EWH', + 'dingzhou': 'DXP', + 'dingzhoudong': 'DOP', + 'diwopu': 'DWJ', + 'dizhuang': 'DVQ', + 'dongandong': 'DCZ', + 'dongbianjing': 'DBB', + 'dongdaihe': 'RDD', + 'dongerdaohe': 'DRB', + 'dongfang': 'UFQ', + 'dongfanghong': 'DFB', + 'dongfeng': 'DIL', + 'donggangbei': 'RGT', + 'dongguan': 'RTQ', + 'dongguandong': 'DMQ', + 'dongguang': 'DGP', + 'donghai': 'DHB', + 'donghaixian': 'DQH', + 'dongjin': 'DKB', + 'dongjingcheng': 'DJB', + 'donglai': 'RVD', + 'dongmiaohe': 'DEP', + 'dongmingcun': 'DMD', + 'dongmingxian': 'DNF', + 'dongsheng': 'DOC', + 'dongshengxi': 'DYC', + 'dongtai': 'DBH', + 'dongtonghua': 'DTL', + 'dongwan': 'DRJ', + 'dongxiang': 'DXG', + 'dongxinzhuang': 'DXD', + 'dongxu': 'RXP', + 'dongying': 'DPK', + 'dongyingnan': 'DOK', + 'dongyudi': 'DBV', + 'dongzhen': 'DNV', + 'dongzhi': 'DCH', + 'dongzhuang': 'DZV', + 'douluo': 'DLV', + 'douzhangzhuang': 'RZP', + 'douzhuang': 'ROP', + 'duanzhou': 'WZQ', + 'duge': 'DMM', + 'duiqingshan': 'DQB', + 'duizhen': 'DWV', + 'dujia': 'DJL', + 'dujiangyan': 'DDW', + 'dulitun': 'DTX', + 'dunhua': 'DHL', + 'dunhuang': 'DHJ', + 'dushan': 'RWW', + 'dushupu': 'DPM', + 'duyun': 'RYW', + 'duyundong': 'KJW', + 'ebian': 'EBW', + 'eerduosi': 'EEC', + 'ejina': 'EJC', + 'emei': 'EMW', + 'emeishan': 'IXW', + 'enshi': 'ESN', + 'erdaogoumen': 'RDP', + 'erdaowan': 'RDX', + 'erlian': 'RLC', + 'erlong': 'RLD', + 'erlongshantun': 'ELA', + 'ermihe': 'RML', + 'erying': 'RYJ', + 'ezhou': 'ECN', + 'ezhoudong': 'EFN', + 'faer': 'FEM', + 'fanchangxi': 'PUH', + 'fangchenggangbei': 'FBZ', + 'fanjiatun': 'FTT', + 'fanshi': 'FSV', + 'fanzhen': 'VZK', + 'faqi': 'FQE', + 'feidong': 'FIH', + 'feixian': 'FXK', + 'fengcheng': 'FCG', + 'fengchengdong': 'FDT', + 'fengchengnan': 'FNG', + 'fengdu': 'FUW', + 'fenghua': 'FHH', + 'fenghuangcheng': 'FHT', + 'fenghuangjichang': 'FJQ', + 'fenglezhen': 'FZB', + 'fenglingdu': 'FLV', + 'fengshuicun': 'FSJ', + 'fengshun': 'FUQ', + 'fengtun': 'FTX', + 'fengxian': 'FXY', + 'fengyang': 'FUH', + 'fengzhen': 'FZC', + 'fengzhou': 'FZY', + 'fenhe': 'FEV', + 'fenyang': 'FAV', + 'fenyi': 'FYG', + 'foshan': 'FSQ', + 'fuan': 'FAS', + 'fuchuan': 'FDZ', + 'fuding': 'FES', + 'fuhai': 'FHX', + 'fujin': 'FIB', + 'fulaerji': 'FRX', + 'fuling': 'FLW', + 'fulingbei': 'FEW', + 'fuliqu': 'FLJ', + 'fulitun': 'FTB', + 'funan': 'FNH', + 'funing': 'FNP', + 'fuqing': 'FQS', + 'fuquan': 'VMW', + 'fushankou': 'FKP', + 'fushanzhen': 'FZQ', + 'fushun': 'FST', + 'fushunbei': 'FET', + 'fusong': 'FSL', + 'fusui': 'FSZ', + 'futian': 'NZQ', + 'futuyu': 'FYP', + 'fuxian': 'FEY', + 'fuxiandong': 'FDY', + 'fuxin': 'FXD', + 'fuyang': 'FYH', + 'fuyu': 'FYT', + 'fuyuan': 'FYM', + 'fuyubei': 'FBT', + 'fuzhou': 'FZG', + 'fuzhoubei': 'FBG', + 'fuzhoudong': 'FDG', + 'fuzhounan': 'FYS', + 'gaizhou': 'GXT', + 'gaizhouxi': 'GAT', + 'gancaodian': 'GDJ', + 'gangou': 'GGL', + 'gangu': 'GGJ', + 'ganhe': 'GAX', + 'ganluo': 'VOW', + 'ganqika': 'GQD', + 'ganquan': 'GQY', + 'ganquanbei': 'GEY', + 'ganshui': 'GSW', + 'gantang': 'GNJ', + 'ganzhou': 'GZG', + 'gaoan': 'GCG', + 'gaobeidian': 'GBP', + 'gaobeidiandong': 'GMP', + 'gaocheng': 'GEP', + 'gaocun': 'GCV', + 'gaogezhuang': 'GGP', + 'gaolan': 'GEJ', + 'gaoloufang': 'GFM', + 'gaomi': 'GMK', + 'gaoping': 'GPF', + 'gaoqiaozhen': 'GZD', + 'gaoshanzi': 'GSD', + 'gaotai': 'GTJ', + 'gaotainan': 'GAJ', + 'gaotan': 'GAY', + 'gaoyi': 'GIP', + 'gaoyixi': 'GNP', + 'gaozhou': 'GSQ', + 'gashidianzi': 'GXD', + 'gediannan': 'GNN', + 'geermu': 'GRO', + 'gegenmiao': 'GGT', + 'geju': 'GEM', + 'genhe': 'GEX', + 'gezhenpu': 'GZT', + 'gongcheng': 'GCZ', + 'gongmiaozi': 'GMC', + 'gongnonghu': 'GRT', + 'gongpengzi': 'GPT', + 'gongqingcheng': 'GAG', + 'gongyi': 'GXF', + 'gongyinan': 'GYF', + 'gongyingzi': 'GYD', + 'gongzhuling': 'GLT', + 'gongzhulingnan': 'GBT', + 'goubangzi': 'GBD', + 'guan': 'GFP', + 'guangan': 'VJW', + 'guangannan': 'VUW', + 'guangao': 'GVP', + 'guangde': 'GRH', + 'guanghan': 'GHW', + 'guanghanbei': 'GVW', + 'guangmingcheng': 'IMQ', + 'guangnanwei': 'GNM', + 'guangning': 'FBQ', + 'guangningsi': 'GQT', + 'guangningsinan': 'GNT', + 'guangshan': 'GUN', + 'guangshui': 'GSN', + 'guangtongbei': 'GPM', + 'guangyuan': 'GYW', + 'guangyuannan': 'GAW', + 'guangze': 'GZS', + 'guangzhou': 'GZQ', + 'guangzhoubei': 'GBQ', + 'guangzhoudong': 'GGQ', + 'guangzhounan': 'IZQ', + 'guangzhouxi': 'GXQ', + 'guanlin': 'GLF', + 'guanling': 'GLE', + 'guanshui': 'GST', + 'guanting': 'GTP', + 'guantingxi': 'KEP', + 'guanzhaishan': 'GSS', + 'guanzijing': 'GOT', + 'guazhou': 'GZJ', + 'gucheng': 'GCN', + 'guchengzhen': 'GZB', + 'gudong': 'GDV', + 'guian': 'GAE', + 'guiding': 'GTW', + 'guidingbei': 'FMW', + 'guidingnan': 'IDW', + 'guidingxian': 'KIW', + 'guigang': 'GGZ', + 'guilin': 'GLZ', + 'guilinbei': 'GBZ', + 'guilinxi': 'GEZ', + 'guiliuhe': 'GHT', + 'guiping': 'GAZ', + 'guixi': 'GXG', + 'guiyang': 'GIW', + 'guiyangbei': 'KQW', + 'gujiao': 'GJV', + 'gujiazi': 'GKT', + 'gulang': 'GLJ', + 'gulian': 'GRX', + 'guojiadian': 'GDT', + 'guoleizhuang': 'GLP', + 'guosong': 'GSL', + 'guoyang': 'GYH', + 'guozhen': 'GZY', + 'gushankou': 'GSP', + 'gushi': 'GXN', + 'gutian': 'GTS', + 'gutianbei': 'GBS', + 'gutianhuizhi': 'STS', + 'guyuan': 'GYL', + 'guzhen': 'GEH', + 'haerbin': 'HBB', + 'haerbinbei': 'HTB', + 'haerbindong': 'VBB', + 'haerbinxi': 'VAB', + 'haianxian': 'HIH', + 'haibei': 'HEB', + 'haicheng': 'HCT', + 'haichengxi': 'HXT', + 'haidongxi': 'HDO', + 'haikou': 'VUQ', + 'haikoudong': 'KEQ', + 'hailaer': 'HRX', + 'hailin': 'HRB', + 'hailong': 'HIL', + 'hailun': 'HLB', + 'haining': 'HNH', + 'hainingxi': 'EUH', + 'haishiwan': 'HSO', + 'haituozi': 'HZT', + 'haiwan': 'RWH', + 'haiyang': 'HYK', + 'haiyangbei': 'HEK', + 'halahai': 'HIT', + 'halasu': 'HAX', + 'hami': 'HMR', + 'hancheng': 'HCY', + 'hanchuan': 'HCN', + 'hanconggou': 'HKB', + 'handan': 'HDP', + 'handandong': 'HPP', + 'hanfuwan': 'HXJ', + 'hangjinhouqi': 'HDC', + 'hangu': 'HGP', + 'hangzhou': 'HZH', + 'hangzhoudong': 'HGH', + 'hangzhounan': 'XHH', + 'hanjiang': 'HJS', + 'hankou': 'HKN', + 'hanling': 'HAT', + 'hanmaying': 'HYP', + 'hanshou': 'VSQ', + 'hanyin': 'HQY', + 'hanyuan': 'WHW', + 'hanzhong': 'HOY', + 'haolianghe': 'HHB', + 'hebei': 'HMB', + 'hebi': 'HAF', + 'hebian': 'HBV', + 'hebidong': 'HFF', + 'hechuan': 'WKW', + 'hechun': 'HCZ', + 'hefei': 'HFH', + 'hefeibeicheng': 'COH', + 'hefeinan': 'ENH', + 'hefeixi': 'HTH', + 'hegang': 'HGB', + 'heichongtan': 'HCJ', + 'heihe': 'HJB', + 'heijing': 'HIM', + 'heishui': 'HOT', + 'heitai': 'HQB', + 'heiwang': 'HWK', + 'hejiadian': 'HJJ', + 'hejianxi': 'HXP', + 'hejin': 'HJV', + 'hejing': 'HJR', + 'hekoubei': 'HBM', + 'hekounan': 'HKJ', + 'heli': 'HOB', + 'helong': 'HLL', + 'hengdaohezi': 'HDB', + 'hengfeng': 'HFG', + 'henggouqiaodong': 'HNN', + 'hengnan': 'HNG', + 'hengshan': 'HSQ', + 'hengshanxi': 'HEQ', + 'hengshui': 'HSP', + 'hengyang': 'HYQ', + 'hengyangdong': 'HVQ', + 'heping': 'VAQ', + 'hepu': 'HVZ', + 'heqing': 'HQM', + 'heshengqiaodong': 'HLN', + 'heshituoluogai': 'VSR', + 'heshuo': 'VUR', + 'hetian': 'VTR', + 'heyang': 'HAY', + 'heyangbei': 'HTY', + 'heyuan': 'VIQ', + 'heze': 'HIK', + 'hezhou': 'HXZ', + 'hongan': 'HWN', + 'honganxi': 'VXN', + 'hongguangzhen': 'IGW', + 'hongguo': 'HEM', + 'honghe': 'HPB', + 'honghuagou': 'VHD', + 'hongjiang': 'HFM', + 'hongqing': 'HEY', + 'hongshan': 'VSB', + 'hongshaxian': 'VSJ', + 'hongsipu': 'HSJ', + 'hongtong': 'HDV', + 'hongtongxi': 'HTV', + 'hongxiantai': 'HTJ', + 'hongxing': 'VXB', + 'hongxinglong': 'VHB', + 'hongyan': 'VIX', + 'houma': 'HMV', + 'houmaxi': 'HPV', + 'houmen': 'KMQ', + 'huacheng': 'VCQ', + 'huade': 'HGC', + 'huahu': 'KHN', + 'huaian': 'AUH', + 'huaiannan': 'AMH', + 'huaibei': 'HRH', + 'huaibin': 'HVN', + 'huaihua': 'HHQ', + 'huaihuanan': 'KAQ', + 'huaiji': 'FAQ', + 'huainan': 'HAH', + 'huainandong': 'HOH', + 'huairen': 'HRV', + 'huairendong': 'HFV', + 'huairou': 'HRP', + 'huairoubei': 'HBP', + 'huajia': 'HJT', + 'huajiazhuang': 'HJM', + 'hualin': 'HIB', + 'huanan': 'HNB', + 'huangbai': 'HBL', + 'huangchuan': 'KCN', + 'huangcun': 'HCP', + 'huanggang': 'KGN', + 'huanggangdong': 'KAN', + 'huanggangxi': 'KXN', + 'huangguayuan': 'HYM', + 'huanggutun': 'HTT', + 'huanghejingqu': 'HCF', + 'huanghuatong': 'HUD', + 'huangkou': 'KOH', + 'huangling': 'ULY', + 'huanglingnan': 'VLY', + 'huangliu': 'KLQ', + 'huangmei': 'VEH', + 'huangnihe': 'HHL', + 'huangshan': 'HKH', + 'huangshanbei': 'NYH', + 'huangshi': 'HSN', + 'huangshibei': 'KSN', + 'huangshidong': 'OSN', + 'huangsongdian': 'HDL', + 'huangyangtan': 'HGJ', + 'huangyangzhen': 'HYJ', + 'huangyuan': 'HNO', + 'huangzhou': 'VON', + 'huantai': 'VTK', + 'huanxintian': 'VTB', + 'huapengzi': 'HZM', + 'huaqiao': 'VQH', + 'huarong': 'HRN', + 'huarongdong': 'HPN', + 'huarongnan': 'KRN', + 'huashan': 'HSY', + 'huashanbei': 'HDY', + 'huashannan': 'KNN', + 'huaying': 'HUW', + 'huayuan': 'HUN', + 'huayuankou': 'HYT', + 'huazhou': 'HZZ', + 'huhehaote': 'HHC', + 'huhehaotedong': 'NDC', + 'huian': 'HNS', + 'huichangbei': 'XEG', + 'huidong': 'KDQ', + 'huihuan': 'KHQ', + 'huinong': 'HMJ', + 'huishan': 'VCH', + 'huitong': 'VTQ', + 'huixian': 'HYY', + 'huizhou': 'HCQ', + 'huizhounan': 'KNQ', + 'huizhouxi': 'VXQ', + 'hukou': 'HKG', + 'hulan': 'HUB', + 'hulin': 'VLB', + 'huludao': 'HLD', + 'huludaobei': 'HPD', + 'hulusitai': 'VTJ', + 'humen': 'IUQ', + 'hunchun': 'HUL', + 'hunhe': 'HHT', + 'huoerguosi': 'HFR', + 'huojia': 'HJF', + 'huolianzhai': 'HLT', + 'huolinguole': 'HWD', + 'huoqiu': 'FBH', + 'huozhou': 'HZV', + 'huozhoudong': 'HWV', + 'hushiha': 'HHP', + 'hushitai': 'HUT', + 'huzhou': 'VZH', + 'jiafeng': 'JFF', + 'jiagedaqi': 'JGX', + 'jialuhe': 'JLF', + 'jiamusi': 'JMB', + 'jian': 'VAG', + 'jianchang': 'JFD', + 'jianfeng': 'PFQ', + 'jiangbiancun': 'JBG', + 'jiangdu': 'UDH', + 'jianghua': 'JHZ', + 'jiangjia': 'JJB', + 'jiangjin': 'JJW', + 'jiangle': 'JLS', + 'jiangmen': 'JWQ', + 'jiangning': 'JJH', + 'jiangningxi': 'OKH', + 'jiangqiao': 'JQX', + 'jiangshan': 'JUH', + 'jiangsuotian': 'JOM', + 'jiangyan': 'UEH', + 'jiangyong': 'JYZ', + 'jiangyou': 'JFW', + 'jiangyuan': 'SZL', + 'jianhu': 'AJH', + 'jianningxianbei': 'JCS', + 'jianou': 'JVS', + 'jianouxi': 'JUS', + 'jiansanjiang': 'JIB', + 'jianshe': 'JET', + 'jianshi': 'JRN', + 'jianshui': 'JSM', + 'jianyang': 'JYS', + 'jianyangnan': 'JOW', + 'jiaocheng': 'JNV', + 'jiaohe': 'JHL', + 'jiaohexi': 'JOL', + 'jiaomei': 'JES', + 'jiaozhou': 'JXK', + 'jiaozhoubei': 'JZK', + 'jiaozuo': 'JOF', + 'jiaozuodong': 'WEF', + 'jiashan': 'JSH', + 'jiashannan': 'EAH', + 'jiaxiang': 'JUK', + 'jiaxing': 'JXH', + 'jiaxingnan': 'EPH', + 'jiaxinzi': 'JXT', + 'jiayuguan': 'JGJ', + 'jiayuguannan': 'JBJ', + 'jidong': 'JOB', + 'jieshoushi': 'JUN', + 'jiexiu': 'JXV', + 'jiexiudong': 'JDV', + 'jieyang': 'JRQ', + 'jiguanshan': 'JST', + 'jijiagou': 'VJD', + 'jilin': 'JLL', + 'jiling': 'JLJ', + 'jimobei': 'JVK', + 'jinan': 'JNK', + 'jinandong': 'JAK', + 'jinanxi': 'JGK', + 'jinbaotun': 'JBD', + 'jinchang': 'JCJ', + 'jincheng': 'JCF', + 'jinchengbei': 'JEF', + 'jinchengjiang': 'JJZ', + 'jingbian': 'JIY', + 'jingchuan': 'JAJ', + 'jingde': 'NSH', + 'jingdezhen': 'JCG', + 'jingdian': 'JFP', + 'jinggangshan': 'JGG', + 'jinghai': 'JHP', + 'jinghe': 'JHR', + 'jinghenan': 'JIR', + 'jingmen': 'JMN', + 'jingnan': 'JNP', + 'jingoutun': 'VGP', + 'jingpeng': 'JPC', + 'jingshan': 'JCN', + 'jingtai': 'JTJ', + 'jingtieshan': 'JVJ', + 'jingxi': 'JMZ', + 'jingxian': 'LOH', + 'jingxing': 'JJP', + 'jingyu': 'JYL', + 'jingyuan': 'JYJ', + 'jingyuanxi': 'JXJ', + 'jingzhou': 'JEQ', + 'jinhe': 'JHX', + 'jinhua': 'JBH', + 'jinhuanan': 'RNH', + 'jining': 'JIK', + 'jiningnan': 'JAC', + 'jinjiang': 'JJS', + 'jinkeng': 'JKT', + 'jinmacun': 'JMM', + 'jinshanbei': 'EGH', + 'jinshantun': 'JTB', + 'jinxian': 'JUG', + 'jinxiannan': 'JXG', + 'jinyuewan': 'PYQ', + 'jinyun': 'JYH', + 'jinyunxi': 'PYH', + 'jinzhai': 'JZH', + 'jinzhangzi': 'JYD', + 'jinzhong': 'JZV', + 'jinzhou': 'JXP', + 'jinzhounan': 'JOD', + 'jishan': 'JVV', + 'jishou': 'JIQ', + 'jishu': 'JSL', + 'jiujiang': 'JJG', + 'jiuquan': 'JQJ', + 'jiuquannan': 'JNJ', + 'jiusan': 'SSX', + 'jiutai': 'JTL', + 'jiutainan': 'JNL', + 'jiuzhuangwo': 'JVP', + 'jiwen': 'JWX', + 'jixi': 'JXB', + 'jixian': 'JKP', + 'jixibei': 'NRH', + 'jixixian': 'JRH', + 'jiyuan': 'JYF', + 'juancheng': 'JCK', + 'jubao': 'JRT', + 'junan': 'JOK', + 'junde': 'JDB', + 'junliangchengbei': 'JMP', + 'jurongxi': 'JWH', + 'juxian': 'JKK', + 'juye': 'JYK', + 'kaian': 'KAT', + 'kaifeng': 'KFF', + 'kaifengbei': 'KBF', + 'kaijiang': 'KAW', + 'kaili': 'KLW', + 'kailinan': 'QKW', + 'kailu': 'KLC', + 'kaitong': 'KTT', + 'kaiyang': 'KVW', + 'kaiyuan': 'KYT', + 'kaiyuanxi': 'KXT', + 'kalaqi': 'KQX', + 'kangcheng': 'KCP', + 'kangjinjing': 'KJB', + 'kangxiling': 'KXZ', + 'kangzhuang': 'KZP', + 'kashi': 'KSR', + 'kedong': 'KOB', + 'kelamayi': 'KHR', + 'kelan': 'KLV', + 'keshan': 'KSB', + 'keyihe': 'KHX', + 'kouqian': 'KQL', + 'kuandian': 'KDT', + 'kuche': 'KCR', + 'kuduer': 'KDX', + 'kuerle': 'KLR', + 'kuishan': 'KAB', + 'kuitan': 'KTQ', + 'kuitun': 'KTR', + 'kulun': 'KLD', + 'kunming': 'KMM', + 'kunmingxi': 'KXM', + 'kunshan': 'KSH', + 'kunshannan': 'KNH', + 'kunyang': 'KAM', + 'lagu': 'LGB', + 'laha': 'LHX', + 'laibin': 'UBZ', + 'laibinbei': 'UCZ', + 'laituan': 'LVZ', + 'laiwudong': 'LWK', + 'laiwuxi': 'UXK', + 'laixi': 'LXK', + 'laixibei': 'LBK', + 'laiyang': 'LYK', + 'laiyuan': 'LYP', + 'laizhou': 'LZS', + 'lalin': 'LAB', + 'lamadian': 'LMX', + 'lancun': 'LCK', + 'langang': 'LNB', + 'langfang': 'LJP', + 'langfangbei': 'LFP', + 'langweishan': 'LRJ', + 'langxiang': 'LXB', + 'langzhong': 'LZE', + 'lankao': 'LKF', + 'lankaonan': 'LUF', + 'lanling': 'LLB', + 'lanlingbei': 'COK', + 'lanxi': 'LWH', + 'lanzhou': 'LZJ', + 'lanzhoudong': 'LVJ', + 'lanzhouxi': 'LAJ', + 'lanzhouxinqu': 'LQJ', + 'laobian': 'LLT', + 'laochengzhen': 'ACQ', + 'laofu': 'UFD', + 'laolai': 'LAX', + 'laoying': 'LXL', + 'lasa': 'LSO', + 'lazha': 'LEM', + 'lechang': 'LCQ', + 'ledong': 'UQQ', + 'ledu': 'LDO', + 'ledunan': 'LVO', + 'leiyang': 'LYQ', + 'leiyangxi': 'LPQ', + 'leizhou': 'UAQ', + 'lengshuijiangdong': 'UDQ', + 'lepingshi': 'LPG', + 'leshan': 'IVW', + 'leshanbei': 'UTW', + 'leshancun': 'LUM', + 'liangdang': 'LDY', + 'liangdixia': 'LDP', + 'lianggezhuang': 'LGP', + 'liangjia': 'UJT', + 'liangjiadian': 'LRT', + 'liangping': 'UQW', + 'liangpingnan': 'LPE', + 'liangshan': 'LMK', + 'lianjiang': 'LKS', + 'lianjiangkou': 'LHB', + 'lianshanguan': 'LGT', + 'lianyuan': 'LAQ', + 'lianyungang': 'UIH', + 'lianyungangdong': 'UKH', + 'liaocheng': 'UCK', + 'liaoyang': 'LYT', + 'liaoyuan': 'LYL', + 'liaozhong': 'LZD', + 'licheng': 'UCP', + 'lichuan': 'LCN', + 'liduigongyuan': 'INW', + 'lijia': 'LJB', + 'lijiang': 'LHM', + 'lijiaping': 'LIJ', + 'lijinnan': 'LNK', + 'lilinbei': 'KBQ', + 'liling': 'LLG', + 'lilingdong': 'UKQ', + 'limudian': 'LMB', + 'lincheng': 'UUP', + 'linchuan': 'LCG', + 'lindong': 'LRC', + 'linfen': 'LFV', + 'linfenxi': 'LXV', + 'lingaonan': 'KGQ', + 'lingbao': 'LBF', + 'lingbaoxi': 'LPF', + 'lingbi': 'GMH', + 'lingcheng': 'LGK', + 'linghai': 'JID', + 'lingling': 'UWZ', + 'lingqiu': 'LVV', + 'lingshi': 'LSV', + 'lingshidong': 'UDV', + 'lingshui': 'LIQ', + 'lingwu': 'LNJ', + 'lingyuan': 'LYD', + 'lingyuandong': 'LDD', + 'linhai': 'LXX', + 'linhe': 'LHC', + 'linjialou': 'ULK', + 'linjiang': 'LQL', + 'linkou': 'LKB', + 'linli': 'LWQ', + 'linqing': 'UQK', + 'linshengpu': 'LBT', + 'linxi': 'LXC', + 'linxiang': 'LXQ', + 'linyi': 'LVK', + 'linyibei': 'UYK', + 'linying': 'LNF', + 'linyuan': 'LYX', + 'linze': 'LEJ', + 'linzenan': 'LDJ', + 'liquan': 'LGY', + 'lishizhai': 'LET', + 'lishui': 'LDH', + 'lishuzhen': 'LSB', + 'litang': 'LTZ', + 'liudaohezi': 'LVP', + 'liuhe': 'KLH', + 'liuhezhen': 'LEX', + 'liujiadian': 'UDT', + 'liujiahe': 'LVT', + 'liulinnan': 'LKV', + 'liupanshan': 'UPJ', + 'liupanshui': 'UMW', + 'liushuigou': 'USP', + 'liushutun': 'LSD', + 'liuyuan': 'DHR', + 'liuyuannan': 'LNR', + 'liuzhi': 'LIW', + 'liuzhou': 'LZZ', + 'liwang': 'VLJ', + 'lixian': 'LEQ', + 'liyang': 'LEH', + 'lizhi': 'LZX', + 'longandong': 'IDZ', + 'longchang': 'LCW', + 'longchangbei': 'NWW', + 'longchuan': 'LUQ', + 'longdongbao': 'FVW', + 'longfeng': 'KFQ', + 'longgou': 'LGJ', + 'longgudian': 'LGM', + 'longhua': 'LHP', + 'longjia': 'UJL', + 'longjiang': 'LJX', + 'longjing': 'LJL', + 'longli': 'LLW', + 'longlibei': 'KFW', + 'longnan': 'UNG', + 'longquansi': 'UQJ', + 'longshanzhen': 'LAS', + 'longshi': 'LAG', + 'longtangba': 'LBM', + 'longxi': 'LXJ', + 'longxian': 'LXY', + 'longyan': 'LYS', + 'longyou': 'LMH', + 'longzhen': 'LZA', + 'longzhuagou': 'LZT', + 'loudi': 'LDQ', + 'loudinan': 'UOQ', + 'luan': 'UAH', + 'luanhe': 'UDP', + 'luanheyan': 'UNP', + 'luanping': 'UPP', + 'luanxian': 'UXP', + 'luchaogang': 'UCH', + 'lucheng': 'UTP', + 'luchuan': 'LKZ', + 'ludao': 'LDL', + 'lueyang': 'LYY', + 'lufan': 'LVM', + 'lufeng': 'LLQ', + 'lufengnan': 'LQM', + 'lugou': 'LOM', + 'lujiang': 'UJH', + 'lukoupu': 'LKQ', + 'luliang': 'LRM', + 'lulong': 'UAP', + 'luntai': 'LAR', + 'luocheng': 'VCZ', + 'luofa': 'LOP', + 'luohe': 'LON', + 'luohexi': 'LBN', + 'luojiang': 'LJW', + 'luojiangdong': 'IKW', + 'luomen': 'LMJ', + 'luoping': 'LPM', + 'luopoling': 'LPP', + 'luoshan': 'LRN', + 'luotuoxiang': 'LTJ', + 'luowansanjiang': 'KRW', + 'luoyang': 'LYF', + 'luoyangdong': 'LDF', + 'luoyanglongmen': 'LLF', + 'luoyuan': 'LVS', + 'lushan': 'LAF', + 'lushuihe': 'LUL', + 'lutai': 'LTP', + 'luxi': 'LUG', + 'luzhai': 'LIZ', + 'luzhaibei': 'LSZ', + 'lvboyuan': 'LCF', + 'lvhua': 'LWJ', + 'lvliang': 'LHV', + 'lvshun': 'LST', + 'maanshan': 'MAH', + 'maanshandong': 'OMH', + 'macheng': 'MCN', + 'machengbei': 'MBN', + 'mahuang': 'MHZ', + 'maiyuan': 'MYS', + 'malan': 'MLR', + 'malianhe': 'MHB', + 'malin': 'MID', + 'malong': 'MGM', + 'manasi': 'MSR', + 'manasihu': 'MNR', + 'mangui': 'MHX', + 'manshuiwan': 'MKW', + 'manzhouli': 'MLX', + 'maoba': 'MBY', + 'maobaguan': 'MGY', + 'maocaoping': 'KPM', + 'maoershan': 'MRB', + 'maolin': 'MLD', + 'maoling': 'MLZ', + 'maoming': 'MDQ', + 'maomingxi': 'MMZ', + 'maoshezu': 'MOM', + 'maqiaohe': 'MQB', + 'masanjia': 'MJT', + 'mashan': 'MAB', + 'mawei': 'VAW', + 'mayang': 'MVQ', + 'meihekou': 'MHL', + 'meilan': 'MHQ', + 'meishan': 'MSW', + 'meishandong': 'IUW', + 'meixi': 'MEB', + 'meizhou': 'MOQ', + 'mengdonghe': 'MUQ', + 'mengjiagang': 'MGB', + 'mengzhuang': 'MZF', + 'mengzi': 'MZM', + 'mengzibei': 'MBM', + 'menyuan': 'MYO', + 'mianchi': 'MCF', + 'mianchinan': 'MNF', + 'mianduhe': 'MDX', + 'mianning': 'UGW', + 'mianxian': 'MVY', + 'mianyang': 'MYW', + 'miaocheng': 'MAP', + 'miaoling': 'MLL', + 'miaoshan': 'MSN', + 'miaozhuang': 'MZJ', + 'midu': 'MDF', + 'miluo': 'MLQ', + 'miluodong': 'MQQ', + 'mingcheng': 'MCL', + 'minggang': 'MGN', + 'minggangdong': 'MDN', + 'mingguang': 'MGH', + 'mingshuihe': 'MUT', + 'mingzhu': 'MFQ', + 'minhenan': 'MNO', + 'minle': 'MBJ', + 'minqing': 'MQS', + 'minqingbei': 'MBS', + 'minquan': 'MQF', + 'minquanbei': 'MIF', + 'mishan': 'MSB', + 'mishazi': 'MST', + 'miyi': 'MMW', + 'miyunbei': 'MUP', + 'mizhi': 'MEY', + 'modaoshi': 'MOB', + 'moerdaoga': 'MRX', + 'mohe': 'MVX', + 'moyu': 'MUR', + 'mudanjiang': 'MDB', + 'muling': 'MLB', + 'mulitu': 'MUD', + 'mupang': 'MPQ', + 'muping': 'MBK', + 'nailin': 'NLD', + 'naiman': 'NMD', + 'naluo': 'ULZ', + 'nanboshan': 'NBK', + 'nanbu': 'NBE', + 'nancao': 'NEF', + 'nancha': 'NCB', + 'nanchang': 'NCG', + 'nanchangxi': 'NXG', + 'nancheng': 'NDG', + 'nanchengsi': 'NSP', + 'nanchong': 'NCW', + 'nanchongbei': 'NCE', + 'nandamiao': 'NMP', + 'nandan': 'NDZ', + 'nanfen': 'NFT', + 'nanfenbei': 'NUT', + 'nanfeng': 'NFG', + 'nangongdong': 'NFP', + 'nanguancun': 'NGP', + 'nanguanling': 'NLT', + 'nanhechuan': 'NHJ', + 'nanhua': 'NHS', + 'nanhudong': 'NDN', + 'nanjiang': 'FIW', + 'nanjiangkou': 'NDQ', + 'nanjing': 'NJS', + 'nanjingnan': 'NKH', + 'nankou': 'NKP', + 'nankouqian': 'NKT', + 'nanlang': 'NNQ', + 'nanling': 'LLH', + 'nanmu': 'NMX', + 'nanning': 'NNZ', + 'nanningdong': 'NFZ', + 'nanningxi': 'NXZ', + 'nanping': 'NPS', + 'nanpingbei': 'NBS', + 'nanpingnan': 'NNS', + 'nanqiao': 'NQD', + 'nanqiu': 'NCK', + 'nantai': 'NTT', + 'nantong': 'NUH', + 'nantou': 'NOQ', + 'nanwanzi': 'NWP', + 'nanxiangbei': 'NEH', + 'nanxiong': 'NCQ', + 'nanyang': 'NFF', + 'nanyangzhai': 'NYF', + 'nanyu': 'NUP', + 'nanzamu': 'NZT', + 'nanzhao': 'NAF', + 'napu': 'NPZ', + 'naqu': 'NQO', + 'nayong': 'NYE', + 'nehe': 'NHX', + 'neijiang': 'NJW', + 'neijiangbei': 'NKW', + 'neixiang': 'NXF', + 'nengjia': 'NJD', + 'nenjiang': 'NGX', + 'niangziguan': 'NIP', + 'nianzishan': 'NZX', + 'nihezi': 'NHD', + 'nileke': 'NIR', + 'nimu': 'NMO', + 'ningan': 'NAB', + 'ningbo': 'NGH', + 'ningbodong': 'NVH', + 'ningcun': 'NCZ', + 'ningde': 'NES', + 'ningdong': 'NOJ', + 'ningdongnan': 'NDJ', + 'ningguo': 'NNH', + 'ninghai': 'NHH', + 'ningjia': 'NVT', + 'ninglingxian': 'NLF', + 'ningming': 'NMZ', + 'ningwu': 'NWV', + 'ningxiang': 'NXQ', + 'niujia': 'NJB', + 'niuxintai': 'NXT', + 'nongan': 'NAT', + 'nuanquan': 'NQJ', + 'paihuaibei': 'PHP', + 'pananzhen': 'PAJ', + 'panguan': 'PAM', + 'panjiadian': 'PDP', + 'panjin': 'PVD', + 'panjinbei': 'PBD', + 'panshi': 'PSL', + 'panzhihua': 'PRW', + 'panzhou': 'PAE', + 'paozi': 'POD', + 'peide': 'PDB', + 'pengan': 'PAW', + 'pengshan': 'PSW', + 'pengshanbei': 'PPW', + 'pengshui': 'PHW', + 'pengyang': 'PYJ', + 'pengze': 'PZG', + 'pengzhou': 'PMW', + 'piandian': 'PRP', + 'pianling': 'PNT', + 'piaoertun': 'PRT', + 'pikou': 'PUT', + 'pikounan': 'PKT', + 'pingan': 'PAL', + 'pinganyi': 'PNO', + 'pinganzhen': 'PZT', + 'pingbanan': 'PBE', + 'pingbian': 'PBM', + 'pingchang': 'PCE', + 'pingdingshan': 'PEN', + 'pingdingshanxi': 'BFF', + 'pingdu': 'PAK', + 'pingfang': 'PFB', + 'pinggang': 'PGL', + 'pingguan': 'PGM', + 'pingguo': 'PGZ', + 'pinghekou': 'PHM', + 'pinghu': 'PHQ', + 'pingliang': 'PIJ', + 'pingliangnan': 'POJ', + 'pingnannan': 'PAZ', + 'pingquan': 'PQP', + 'pingshan': 'PSB', + 'pingshang': 'PSK', + 'pingshe': 'PSV', + 'pingshi': 'PSQ', + 'pingtai': 'PVT', + 'pingtian': 'PTM', + 'pingwang': 'PWV', + 'pingxiang': 'PXG', + 'pingxiangbei': 'PBG', + 'pingxingguan': 'PGV', + 'pingyang': 'PYX', + 'pingyao': 'PYV', + 'pingyaogucheng': 'PDV', + 'pingyi': 'PIK', + 'pingyu': 'PYP', + 'pingyuan': 'PYK', + 'pingyuanpu': 'PPJ', + 'pingzhuang': 'PZD', + 'pingzhuangnan': 'PND', + 'pishan': 'PSR', + 'pixian': 'PWW', + 'pixianxi': 'PCW', + 'pizhou': 'PJH', + 'podixia': 'PXJ', + 'puan': 'PAN', + 'puanxian': 'PUE', + 'pucheng': 'PCY', + 'puchengdong': 'PEY', + 'puding': 'PGW', + 'pulandian': 'PLT', + 'puning': 'PEQ', + 'putaojing': 'PTW', + 'putian': 'PTS', + 'puwan': 'PWT', + 'puxiong': 'POW', + 'puyang': 'PYF', + 'qianan': 'QQP', + 'qianfeng': 'QFB', + 'qianhe': 'QUY', + 'qianjiang': 'QJN', + 'qianjinzhen': 'QEB', + 'qianmotou': 'QMP', + 'qianshan': 'QXQ', + 'qianwei': 'QWD', + 'qianweitang': 'QWP', + 'qianxian': 'QBY', + 'qianyang': 'QOY', + 'qiaotou': 'QAT', + 'qiaoxi': 'QXJ', + 'qichun': 'QRN', + 'qidian': 'QDM', + 'qidong': 'QMQ', + 'qidongbei': 'QRQ', + 'qifengta': 'QVP', + 'qijiang': 'QJW', + 'qijiapu': 'QBT', + 'qilihe': 'QLD', + 'qimen': 'QIH', + 'qingan': 'QAB', + 'qingbaijiangdong': 'QFW', + 'qingchengshan': 'QSW', + 'qingdao': 'QDK', + 'qingdaobei': 'QHK', + 'qingdui': 'QET', + 'qingfeng': 'QFT', + 'qinghe': 'QIP', + 'qinghecheng': 'QYP', + 'qinghemen': 'QHD', + 'qinghuayuan': 'QHP', + 'qingjianxian': 'QNY', + 'qinglian': 'QEW', + 'qinglong': 'QIB', + 'qinglongshan': 'QGH', + 'qingshan': 'QSB', + 'qingshen': 'QVW', + 'qingsheng': 'QSQ', + 'qingshui': 'QUJ', + 'qingshuibei': 'QEJ', + 'qingtian': 'QVH', + 'qingtongxia': 'QTJ', + 'qingxian': 'QXP', + 'qingxu': 'QUV', + 'qingyangshan': 'QSJ', + 'qingyuan': 'QBQ', + 'qingzhoushi': 'QZK', + 'qinhuangdao': 'QTP', + 'qinjia': 'QJB', + 'qinjiazhuang': 'QZV', + 'qinling': 'QLY', + 'qinxian': 'QVV', + 'qinyang': 'QYF', + 'qinzhou': 'QRZ', + 'qinzhoudong': 'QDZ', + 'qionghai': 'QYQ', + 'qiqihaer': 'QHX', + 'qiqihaernan': 'QNB', + 'qishan': 'QAY', + 'qishuyan': 'QYH', + 'qitaihe': 'QTB', + 'qixian': 'QXV', + 'qixiandong': 'QGV', + 'qixiaying': 'QXC', + 'qiyang': 'QWQ', + 'qiyangbei': 'QVQ', + 'qiying': 'QYJ', + 'qiziwan': 'QZQ', + 'quanjiao': 'INH', + 'quanyang': 'QYL', + 'quanzhou': 'QYS', + 'quanzhoudong': 'QRS', + 'quanzhounan': 'QNZ', + 'queshan': 'QSN', + 'qufu': 'QFK', + 'qufudong': 'QAK', + 'qujiang': 'QIM', + 'qujing': 'QJM', + 'qujiu': 'QJZ', + 'quli': 'QLZ', + 'qushuixian': 'QSO', + 'quxian': 'QRW', + 'quzhou': 'QEH', + 'raoping': 'RVQ', + 'raoyang': 'RVP', + 'raoyanghe': 'RHD', + 'renbu': 'RUO', + 'renqiu': 'RQP', + 'reshui': 'RSD', + 'rikaze': 'RKO', + 'rizhao': 'RZK', + 'rongan': 'RAZ', + 'rongchang': 'RCW', + 'rongchangbei': 'RQW', + 'rongcheng': 'RCK', + 'ronggui': 'RUQ', + 'rongjiang': 'RVW', + 'rongshui': 'RSZ', + 'rongxian': 'RXZ', + 'rudong': 'RIH', + 'rugao': 'RBH', + 'ruian': 'RAH', + 'ruichang': 'RCG', + 'ruijin': 'RJG', + 'rujigou': 'RQJ', + 'rushan': 'ROK', + 'ruyang': 'RYF', + 'ruzhou': 'ROF', + 'saihantala': 'SHC', + 'salaqi': 'SLC', + 'sandaohu': 'SDL', + 'sanduxian': 'KKW', + 'sanggendalai': 'OGC', + 'sanguankou': 'OKJ', + 'sangyuanzi': 'SAJ', + 'sanhexian': 'OXP', + 'sanhezhuang': 'SVP', + 'sanhuizhen': 'OZW', + 'sanjiadian': 'ODP', + 'sanjianfang': 'SFX', + 'sanjiangkou': 'SKD', + 'sanjiangnan': 'SWZ', + 'sanjiangxian': 'SOZ', + 'sanjiazhai': 'SMM', + 'sanjingzi': 'OJT', + 'sanmenxia': 'SMF', + 'sanmenxian': 'OQH', + 'sanmenxianan': 'SCF', + 'sanmenxiaxi': 'SXF', + 'sanming': 'SMS', + 'sanmingbei': 'SHS', + 'sanshijia': 'SRD', + 'sanshilipu': 'SST', + 'sanshui': 'SJQ', + 'sanshuibei': 'ARQ', + 'sanshuinan': 'RNQ', + 'sansui': 'QHW', + 'santangji': 'SDH', + 'sanya': 'SEQ', + 'sanyangchuan': 'SYJ', + 'sanyijing': 'OYD', + 'sanying': 'OEJ', + 'sanyuan': 'SAY', + 'sanyuanpu': 'SYL', + 'shache': 'SCR', + 'shacheng': 'SCP', + 'shahai': 'SED', + 'shahe': 'SHP', + 'shahekou': 'SKT', + 'shaheshi': 'VOP', + 'shahousuo': 'SSD', + 'shalingzi': 'SLP', + 'shanchengzhen': 'SCL', + 'shandan': 'SDJ', + 'shangbancheng': 'SBP', + 'shangbanchengnan': 'OBP', + 'shangcheng': 'SWN', + 'shangdu': 'SXC', + 'shanggaozhen': 'SVK', + 'shanghai': 'SHH', + 'shanghaihongqiao': 'AOH', + 'shanghainan': 'SNH', + 'shanghaixi': 'SXH', + 'shanghang': 'JBS', + 'shanghe': 'SOK', + 'shangjia': 'SJB', + 'shangluo': 'OLY', + 'shangnan': 'ONY', + 'shangqiu': 'SQF', + 'shangqiunan': 'SPF', + 'shangrao': 'SRG', + 'shangwan': 'SWP', + 'shangxipu': 'SXM', + 'shangyaodun': 'SPJ', + 'shangyu': 'BDH', + 'shangyuan': 'SUD', + 'shangyubei': 'SSH', + 'shangzhi': 'SZB', + 'shanhaiguan': 'SHD', + 'shanhetun': 'SHL', + 'shanpodong': 'SBN', + 'shanshan': 'SSR', + 'shanshanbei': 'SMR', + 'shanshi': 'SQB', + 'shantou': 'OTQ', + 'shanwei': 'OGQ', + 'shanyin': 'SNV', + 'shaodong': 'FIQ', + 'shaoguan': 'SNQ', + 'shaoguandong': 'SGQ', + 'shaojiatang': 'SJJ', + 'shaoshan': 'SSQ', + 'shaoshannan': 'INQ', + 'shaowu': 'SWS', + 'shaoxing': 'SOH', + 'shaoxingbei': 'SLH', + 'shaoyang': 'SYQ', + 'shaoyangbei': 'OVQ', + 'shapotou': 'SFJ', + 'shaqiao': 'SQM', + 'shatuo': 'SFM', + 'shawanxian': 'SXR', + 'shaxian': 'SAS', + 'shelihu': 'VLD', + 'shenchi': 'SMV', + 'shenfang': 'OLH', + 'shengfang': 'SUP', + 'shenjia': 'OJB', + 'shenjiahe': 'OJJ', + 'shenjingzi': 'SWT', + 'shenmu': 'OMY', + 'shenqiu': 'SQN', + 'shenshu': 'SWB', + 'shentou': 'SEV', + 'shenyang': 'SYT', + 'shenyangbei': 'SBT', + 'shenyangdong': 'SDT', + 'shenyangnan': 'SOT', + 'shenzhen': 'SZQ', + 'shenzhenbei': 'IOQ', + 'shenzhendong': 'BJQ', + 'shenzhenpingshan': 'IFQ', + 'shenzhenxi': 'OSQ', + 'shenzhou': 'OZP', + 'shexian': 'OVH', + 'shexianbei': 'NPH', + 'shiba': 'OBJ', + 'shibing': 'AQW', + 'shiboyuan': 'ZWT', + 'shicheng': 'SCT', + 'shidu': 'SEP', + 'shihezi': 'SZR', + 'shijiazhuang': 'SJP', + 'shijiazhuangbei': 'VVP', + 'shijiazi': 'SJD', + 'shijiazui': 'SHM', + 'shijingshannan': 'SRP', + 'shilidian': 'OMP', + 'shilin': 'SPB', + 'shiling': 'SOL', + 'shilinnan': 'LNM', + 'shilong': 'SLQ', + 'shimenxian': 'OMQ', + 'shimenxianbei': 'VFQ', + 'shiqiao': 'SQE', + 'shiqiaozi': 'SQT', + 'shiquanxian': 'SXY', + 'shiren': 'SRL', + 'shirencheng': 'SRB', + 'shishan': 'SAD', + 'shishanbei': 'NSQ', + 'shiti': 'STE', + 'shitou': 'OTB', + 'shixian': 'SXL', + 'shixiazi': 'SXJ', + 'shixing': 'IPQ', + 'shiyan': 'SNN', + 'shizhuang': 'SNM', + 'shizhuxian': 'OSW', + 'shizong': 'SEM', + 'shizuishan': 'QQJ', + 'shoushan': 'SAT', + 'shouyang': 'SYV', + 'shuangchengbei': 'SBB', + 'shuangchengpu': 'SCB', + 'shuangfeng': 'OFB', + 'shuangfengbei': 'NFQ', + 'shuanghezhen': 'SEL', + 'shuangji': 'SML', + 'shuangliao': 'ZJD', + 'shuangliujichang': 'IPW', + 'shuangliuxi': 'IQW', + 'shuangpai': 'SBZ', + 'shuangyashan': 'SSB', + 'shucheng': 'OCH', + 'shuidong': 'SIL', + 'shuifu': 'OTW', + 'shuijiahu': 'SQH', + 'shuiquan': 'SID', + 'shuiyang': 'OYP', + 'shuiyuan': 'OYJ', + 'shulan': 'SLL', + 'shule': 'SUR', + 'shulehe': 'SHJ', + 'shunchang': 'SCS', + 'shunde': 'ORQ', + 'shundexueyuan': 'OJQ', + 'shunyi': 'SOP', + 'shuozhou': 'SUV', + 'shuyang': 'FMH', + 'sidaowan': 'OUD', + 'sifangtai': 'STB', + 'siheyong': 'OHD', + 'sihong': 'GQH', + 'sihui': 'AHQ', + 'sijialing': 'OLK', + 'siping': 'SPT', + 'sipingdong': 'PPT', + 'sishui': 'OSK', + 'sixian': 'GPH', + 'siyang': 'MPH', + 'song': 'SOB', + 'songchenglu': 'SFF', + 'songhe': 'SBM', + 'songjiang': 'SAH', + 'songjianghe': 'SJL', + 'songjiangnan': 'IMH', + 'songjiangzhen': 'OZL', + 'songshu': 'SFT', + 'songshuzhen': 'SSL', + 'songtao': 'MZQ', + 'songyuan': 'VYT', + 'songyuanbei': 'OCT', + 'songzi': 'SIN', + 'suide': 'ODY', + 'suifenhe': 'SFB', + 'suihua': 'SHB', + 'suiling': 'SIB', + 'suining': 'NIW', + 'suiping': 'SON', + 'suixi': 'SXZ', + 'suiyang': 'SYB', + 'suizhong': 'SZD', + 'suizhongbei': 'SND', + 'suizhou': 'SZN', + 'sujiatun': 'SXT', + 'suning': 'SYP', + 'sunjia': 'SUB', + 'sunwu': 'SKB', + 'sunzhen': 'OZY', + 'suolun': 'SNT', + 'suotuhan': 'SHX', + 'susong': 'OAH', + 'suzhou': 'SZH', + 'suzhoubei': 'OHH', + 'suzhoudong': 'SRH', + 'suzhouxinqu': 'ITH', + 'suzhouyuanqu': 'KAH', + 'taerqi': 'TVX', + 'taha': 'THX', + 'tahe': 'TXX', + 'taian': 'TID', + 'taigu': 'TGV', + 'taiguxi': 'TIV', + 'taihe': 'THG', + 'taihu': 'TKH', + 'taikang': 'TKX', + 'tailai': 'TLX', + 'taimushan': 'TLS', + 'taining': 'TNS', + 'taipingchuan': 'TIT', + 'taipingzhen': 'TEB', + 'taiqian': 'TTK', + 'taishan': 'TAK', + 'taiyangshan': 'TYJ', + 'taiyangsheng': 'TQT', + 'taiyuan': 'TYV', + 'taiyuanbei': 'TBV', + 'taiyuandong': 'TDV', + 'taiyuannan': 'TNV', + 'taizhou': 'UTH', + 'tancheng': 'TZK', + 'tangbao': 'TBQ', + 'tangchi': 'TCX', + 'tanggu': 'TGP', + 'tanghai': 'THM', + 'tanghe': 'THF', + 'tangjiawan': 'PDQ', + 'tangshan': 'TSP', + 'tangshanbei': 'FUP', + 'tangshancheng': 'TCT', + 'tangwanghe': 'THB', + 'tangxunhu': 'THN', + 'tangyin': 'TYF', + 'tangyuan': 'TYB', + 'tanjiajing': 'TNJ', + 'taocun': 'TCK', + 'taocunbei': 'TOK', + 'taojiatun': 'TOT', + 'taolaizhao': 'TPT', + 'taonan': 'TVT', + 'taoshan': 'TAB', + 'tashizui': 'TIM', + 'tayayi': 'TYP', + 'tengxian': 'TAZ', + 'tengzhou': 'TXK', + 'tengzhoudong': 'TEK', + 'tiandong': 'TDZ', + 'tiandongbei': 'TBZ', + 'tiangang': 'TGL', + 'tianjin': 'TJP', + 'tianjinbei': 'TBP', + 'tianjinnan': 'TIP', + 'tianjinxi': 'TXP', + 'tianlin': 'TFZ', + 'tianmen': 'TMN', + 'tianmennan': 'TNN', + 'tianqiaoling': 'TQL', + 'tianshifu': 'TFT', + 'tianshui': 'TSJ', + 'tianyang': 'TRZ', + 'tianyi': 'TND', + 'tianzhen': 'TZV', + 'tianzhu': 'TZJ', + 'tianzhushan': 'QWH', + 'tiechang': 'TCL', + 'tieli': 'TLB', + 'tieling': 'TLT', + 'tielingxi': 'PXT', + 'tingliang': 'TIZ', + 'tonganyi': 'TAJ', + 'tongbai': 'TBF', + 'tongbei': 'TBB', + 'tongcheng': 'TTH', + 'tongdao': 'TRQ', + 'tonggou': 'TOL', + 'tongguan': 'TGY', + 'tonghai': 'TAM', + 'tonghua': 'THL', + 'tonghuaxian': 'TXL', + 'tongjiang': 'TJB', + 'tongjunzhuang': 'TZP', + 'tongliao': 'TLD', + 'tongling': 'TJH', + 'tonglingbei': 'KXH', + 'tongnan': 'TVW', + 'tongren': 'RDQ', + 'tongrennan': 'TNW', + 'tongtu': 'TUT', + 'tongxiang': 'TCH', + 'tongxin': 'TXJ', + 'tongyuanpu': 'TYT', + 'tongyuanpuxi': 'TST', + 'tongzhouxi': 'TAP', + 'tongzi': 'TZW', + 'tongzilin': 'TEW', + 'tuanjie': 'TIX', + 'tuditangdong': 'TTN', + 'tuguiwula': 'TGC', + 'tuha': 'THR', + 'tuliemaodu': 'TMD', + 'tulihe': 'TEX', + 'tulufan': 'TFR', + 'tulufanbei': 'TAR', + 'tumen': 'TML', + 'tumenbei': 'QSL', + 'tumenzi': 'TCJ', + 'tumuertai': 'TRC', + 'tuoyaoling': 'TIL', + 'tuqiang': 'TQX', + 'tuqiaozi': 'TQJ', + 'tuxi': 'TSW', + 'wafangdian': 'WDT', + 'wafangdianxi': 'WXT', + 'waitoushan': 'WIT', + 'walagan': 'WVX', + 'wanfatun': 'WFB', + 'wanganzhen': 'WVP', + 'wangcang': 'WEW', + 'wangdu': 'WDP', + 'wangfu': 'WUT', + 'wanggang': 'WGB', + 'wangjiawan': 'WJJ', + 'wangjiayingxi': 'KNM', + 'wangou': 'WGL', + 'wangqing': 'WQL', + 'wangtong': 'WTP', + 'wangtuanzhuang': 'WZJ', + 'wangyang': 'WYB', + 'wangzhaotun': 'WZB', + 'wanle': 'WEB', + 'wannian': 'WWG', + 'wanning': 'WNQ', + 'wanyuan': 'WYY', + 'wanzhou': 'WYW', + 'wanzhoubei': 'WZE', + 'wawushan': 'WAH', + 'wayaotian': 'WIM', + 'weidong': 'WVT', + 'weifang': 'WFK', + 'weihai': 'WKK', + 'weihaibei': 'WHK', + 'weihe': 'WHB', + 'weihui': 'WHF', + 'weihulingbei': 'WBL', + 'weijin': 'WJL', + 'weinan': 'WNY', + 'weinanbei': 'WBY', + 'weinannan': 'WVY', + 'weinanzhen': 'WNJ', + 'weiqing': 'WAM', + 'weishanzhuang': 'WSP', + 'weishe': 'WSM', + 'weixing': 'WVB', + 'weizhangzi': 'WKD', + 'weizhuang': 'WZY', + 'weizigou': 'WZL', + 'weizizhen': 'WQP', + 'wenan': 'WBP', + 'wenchang': 'WEQ', + 'wenchun': 'WDB', + 'wendeng': 'WBK', + 'wendengdong': 'WGK', + 'wendi': 'WNZ', + 'wenling': 'VHH', + 'wenshui': 'WEV', + 'wenxi': 'WXV', + 'wenxixi': 'WOV', + 'wenzhou': 'RZH', + 'wenzhounan': 'VRH', + 'woken': 'WQB', + 'wolitun': 'WLX', + 'wopi': 'WPT', + 'wuan': 'WAP', + 'wuchagou': 'WCT', + 'wuchang': 'WCN', + 'wudalianchi': 'WRB', + 'wudangshan': 'WRN', + 'wudaogou': 'WDL', + 'wudaohe': 'WHP', + 'wuerqihan': 'WHX', + 'wufushan': 'WFG', + 'wugong': 'WGY', + 'wuguantian': 'WGM', + 'wuhai': 'WVC', + 'wuhaixi': 'WXC', + 'wuhan': 'WHN', + 'wuhu': 'WHH', + 'wuji': 'WJP', + 'wujia': 'WUB', + 'wujiachuan': 'WCJ', + 'wujiatun': 'WJT', + 'wukeshu': 'WKT', + 'wulanhada': 'WLC', + 'wulanhaote': 'WWT', + 'wulashan': 'WSC', + 'wulateqianqi': 'WQC', + 'wulian': 'WLK', + 'wulong': 'WLW', + 'wulongbei': 'WBT', + 'wulongbeidong': 'WMT', + 'wulongquannan': 'WFN', + 'wulumuqi': 'WAR', + 'wulumuqinan': 'WMR', + 'wunuer': 'WRX', + 'wunvshan': 'WET', + 'wupu': 'WUY', + 'wuqiao': 'WUP', + 'wuqing': 'WWP', + 'wushan': 'WSJ', + 'wusheng': 'WSE', + 'wutaishan': 'WSV', + 'wuwei': 'WUJ', + 'wuweinan': 'WWJ', + 'wuwu': 'WVR', + 'wuxi': 'WXH', + 'wuxiang': 'WVV', + 'wuxidong': 'WGH', + 'wuxixinqu': 'IFH', + 'wuxu': 'WYZ', + 'wuxue': 'WXN', + 'wuyi': 'RYH', + 'wuyibei': 'WDH', + 'wuyiling': 'WPB', + 'wuying': 'WWB', + 'wuyishan': 'WAS', + 'wuyishanbei': 'WBS', + 'wuyishandong': 'WCS', + 'wuyuan': 'WYC', + 'wuzhai': 'WZV', + 'wuzhi': 'WIF', + 'wuzhou': 'WZZ', + 'wuzhounan': 'WBZ', + 'xiabancheng': 'EBP', + 'xiachengzi': 'XCB', + 'xiaguanying': 'XGJ', + 'xiahuayuan': 'XYP', + 'xiajiang': 'EJG', + 'xiamatang': 'XAT', + 'xiamen': 'XMS', + 'xiamenbei': 'XKS', + 'xiamengaoqi': 'XBS', + 'xian': 'XAY', + 'xianbei': 'EAY', + 'xiangcheng': 'ERN', + 'xiangfang': 'XFB', + 'xiangfen': 'XFV', + 'xiangfenxi': 'XTV', + 'xianghe': 'XXB', + 'xianglan': 'XNB', + 'xiangtan': 'XTQ', + 'xiangtanbei': 'EDQ', + 'xiangtang': 'XTG', + 'xiangxiang': 'XXQ', + 'xiangyang': 'XFN', + 'xiangyangdong': 'XWN', + 'xiangyuan': 'EIF', + 'xiangyun': 'EXM', + 'xianlin': 'XPH', + 'xiannan': 'CAY', + 'xianning': 'XNN', + 'xianningbei': 'XRN', + 'xianningdong': 'XKN', + 'xianningnan': 'UNN', + 'xianrenqiao': 'XRL', + 'xiantaoxi': 'XAN', + 'xianyang': 'XYY', + 'xianyangqindu': 'XOY', + 'xianyou': 'XWS', + 'xiaocun': 'XEM', + 'xiaodejiang': 'EJM', + 'xiaodong': 'XOD', + 'xiaogan': 'XGN', + 'xiaoganbei': 'XJN', + 'xiaoheyan': 'XYD', + 'xiaohezhen': 'EKY', + 'xiaojinkou': 'NKQ', + 'xiaolan': 'EAQ', + 'xiaoling': 'XLB', + 'xiaonan': 'XNV', + 'xiaoshao': 'XAM', + 'xiaoshi': 'XST', + 'xiaosigou': 'ESP', + 'xiaoxi': 'XOV', + 'xiaoxianbei': 'QSH', + 'xiaoxinjie': 'XXM', + 'xiaoxizhuang': 'XXP', + 'xiaoyangqi': 'XYX', + 'xiaoyuejiu': 'XFM', + 'xiaoyugu': 'XHM', + 'xiapu': 'XOS', + 'xiashe': 'XSV', + 'xiashi': 'XIZ', + 'xiataizi': 'EIP', + 'xiayixian': 'EJH', + 'xibali': 'XLP', + 'xichang': 'ECW', + 'xichangnan': 'ENW', + 'xidamiao': 'XMP', + 'xide': 'EDW', + 'xiehejian': 'EEP', + 'xiejiazhen': 'XMT', + 'xifeng': 'XFT', + 'xigangzi': 'NBB', + 'xigu': 'XIJ', + 'xigucheng': 'XUJ', + 'xihudong': 'WDQ', + 'xijiekou': 'EKM', + 'xilin': 'XYB', + 'xilinhaote': 'XTC', + 'xiliu': 'GCT', + 'ximashan': 'XMB', + 'xinan': 'EAM', + 'xinanxian': 'XAF', + 'xinbaoan': 'XAP', + 'xinchengzi': 'XCT', + 'xinchuoyuan': 'XRX', + 'xindudong': 'EWW', + 'xinfeng': 'EFG', + 'xingan': 'XAZ', + 'xinganbei': 'XDZ', + 'xingcheng': 'XCD', + 'xingguo': 'EUG', + 'xinghexi': 'XEC', + 'xingkai': 'EKB', + 'xinglongdian': 'XDD', + 'xinglongxian': 'EXP', + 'xinglongzhen': 'XZB', + 'xingning': 'ENQ', + 'xingping': 'XPY', + 'xingquanbu': 'XQJ', + 'xingshu': 'XSB', + 'xingshutun': 'XDT', + 'xingtai': 'XTP', + 'xingtaidong': 'EDP', + 'xingye': 'SNZ', + 'xingyi': 'XRZ', + 'xinhe': 'XIR', + 'xinhua': 'EHQ', + 'xinhuanan': 'EJQ', + 'xinhuang': 'XLQ', + 'xinhuangxi': 'EWQ', + 'xinhuatun': 'XAX', + 'xinhui': 'EFQ', + 'xining': 'XNO', + 'xinji': 'ENP', + 'xinjiang': 'XJV', + 'xinjin': 'IRW', + 'xinjinnan': 'ITW', + 'xinle': 'ELP', + 'xinli': 'XLJ', + 'xinlin': 'XPX', + 'xinlitun': 'XLD', + 'xinlizhen': 'XGT', + 'xinmin': 'XMD', + 'xinpingtian': 'XPM', + 'xinqing': 'XQB', + 'xinqiu': 'XQD', + 'xinsongpu': 'XOB', + 'xinwopu': 'EPD', + 'xinxian': 'XSN', + 'xinxiang': 'XXF', + 'xinxiangdong': 'EGF', + 'xinxingxian': 'XGQ', + 'xinyang': 'XUN', + 'xinyangdong': 'OYN', + 'xinyangzhen': 'XZJ', + 'xinyi': 'VIH', + 'xinyouyi': 'EYB', + 'xinyu': 'XUG', + 'xinyubei': 'XBG', + 'xinzhangfang': 'XZX', + 'xinzhangzi': 'ERP', + 'xinzhao': 'XZT', + 'xinzhengjichang': 'EZF', + 'xinzhou': 'XXV', + 'xiongyuecheng': 'XYT', + 'xiping': 'XPN', + 'xipu': 'XIW', + 'xipudong': 'XAW', + 'xishui': 'XZN', + 'xiushan': 'ETW', + 'xiuwu': 'XWF', + 'xiuwuxi': 'EXF', + 'xiwuqi': 'XWC', + 'xixia': 'XIF', + 'xixian': 'ENN', + 'xixiang': 'XQY', + 'xixiaozhao': 'XZC', + 'xiyangcun': 'XQF', + 'xizhelimu': 'XRD', + 'xizi': 'XZD', + 'xuancheng': 'ECH', + 'xuangang': 'XGV', + 'xuanhan': 'XHY', + 'xuanhe': 'XWJ', + 'xuanhua': 'XHP', + 'xuanwei': 'XWM', + 'xuanzhong': 'XRP', + 'xuchang': 'XCF', + 'xuchangdong': 'XVF', + 'xujia': 'XJB', + 'xujiatai': 'XTJ', + 'xujiatun': 'XJT', + 'xunyang': 'XUY', + 'xunyangbei': 'XBY', + 'xupu': 'EPQ', + 'xupunan': 'EMQ', + 'xusanwan': 'XSJ', + 'xushui': 'XSP', + 'xuwen': 'XJQ', + 'xuzhou': 'XCH', + 'xuzhoudong': 'UUH', + 'yabuli': 'YBB', + 'yabulinan': 'YWB', + 'yakeshi': 'YKX', + 'yalongwan': 'TWQ', + 'yanan': 'YWY', + 'yancheng': 'YEK', + 'yanchi': 'YAP', + 'yanchuan': 'YYY', + 'yandangshan': 'YGH', + 'yangang': 'YGW', + 'yangcao': 'YAB', + 'yangcaodi': 'YKM', + 'yangcha': 'YAL', + 'yangchang': 'YED', + 'yangcheng': 'YNF', + 'yangchenghu': 'AIH', + 'yangchun': 'YQQ', + 'yangcun': 'YBP', + 'yanggang': 'YRB', + 'yanggao': 'YOV', + 'yanggu': 'YIK', + 'yanghe': 'GTH', + 'yangjiuhe': 'YHM', + 'yanglin': 'YLM', + 'yangling': 'YSY', + 'yanglingnan': 'YEY', + 'yangliuqing': 'YQP', + 'yangmingbu': 'YVV', + 'yangpingguan': 'YAY', + 'yangpu': 'ABM', + 'yangqu': 'YQV', + 'yangquan': 'AQP', + 'yangquanbei': 'YPP', + 'yangquanqu': 'YYV', + 'yangshuling': 'YAD', + 'yangshuo': 'YCZ', + 'yangweishao': 'YWM', + 'yangxin': 'YVK', + 'yangyi': 'ARP', + 'yangzhangzi': 'YZD', + 'yangzhewo': 'AEM', + 'yangzhou': 'YLH', + 'yanhecheng': 'YHP', + 'yanhui': 'AEP', + 'yanji': 'YJL', + 'yanjiao': 'AJP', + 'yanjiazhuang': 'AZK', + 'yanjin': 'AEW', + 'yanjixi': 'YXL', + 'yanliang': 'YNY', + 'yanling': 'YAG', + 'yanqi': 'YSR', + 'yanqing': 'YNP', + 'yanshan': 'AOP', + 'yanshi': 'YSF', + 'yantai': 'YAK', + 'yantainan': 'YLK', + 'yantongshan': 'YSL', + 'yantongtun': 'YUX', + 'yanzhou': 'YZK', + 'yanzibian': 'YZY', + 'yaoan': 'YAC', + 'yaojia': 'YAT', + 'yaoqianhutun': 'YQT', + 'yaoshang': 'ASP', + 'yatunpu': 'YTZ', + 'yayuan': 'YYL', + 'yazhou': 'YUQ', + 'yebaishou': 'YBD', + 'yecheng': 'YER', + 'yesanpo': 'AIP', + 'yian': 'YAX', + 'yibin': 'YBW', + 'yichang': 'YCN', + 'yichangdong': 'HAN', + 'yicheng': 'YIN', + 'yichun': 'YCB', + 'yichunxi': 'YCG', + 'yiershi': 'YET', + 'yijiang': 'RVH', + 'yijianpu': 'YJT', + 'yilaha': 'YLX', + 'yiliang': 'ALW', + 'yiliangbei': 'YSM', + 'yilin': 'YLB', + 'yima': 'YMF', + 'yimianpo': 'YPB', + 'yimianshan': 'YST', + 'yimin': 'YMX', + 'yinai': 'YVM', + 'yinan': 'YNK', + 'yinchuan': 'YIJ', + 'yindi': 'YDM', + 'yingbinlu': 'YFW', + 'yingcheng': 'YHN', + 'yingchengzi': 'YCT', + 'yingchun': 'YYB', + 'yingde': 'YDQ', + 'yingdexi': 'IIQ', + 'yingjie': 'YAM', + 'yingjisha': 'YIR', + 'yingkou': 'YKT', + 'yingkoudong': 'YGT', + 'yingpanshui': 'YZJ', + 'yingshan': 'NUW', + 'yingshouyingzi': 'YIP', + 'yingtan': 'YTG', + 'yingtanbei': 'YKG', + 'yingxian': 'YZV', + 'yining': 'YMR', + 'yiningdong': 'YNR', + 'yinlang': 'YJX', + 'yinping': 'KPQ', + 'yintan': 'CTQ', + 'yishui': 'YUK', + 'yitulihe': 'YEX', + 'yiwu': 'YWH', + 'yixian': 'YXD', + 'yixing': 'YUH', + 'yiyang': 'YIG', + 'yizheng': 'UZH', + 'yizhou': 'YSZ', + 'yizi': 'YQM', + 'yongan': 'YAS', + 'yonganxiang': 'YNB', + 'yongchengbei': 'RGH', + 'yongchuan': 'YCW', + 'yongchuandong': 'WMW', + 'yongdeng': 'YDJ', + 'yongding': 'YGS', + 'yongfengying': 'YYM', + 'yongfunan': 'YBZ', + 'yongji': 'YIV', + 'yongjia': 'URH', + 'yongjibei': 'AJV', + 'yongkang': 'RFH', + 'yongkangnan': 'QUH', + 'yonglang': 'YLW', + 'yongledian': 'YDY', + 'yongshou': 'ASY', + 'yongtai': 'YTS', + 'yongxiu': 'ACG', + 'yongzhou': 'AOQ', + 'youhao': 'YOB', + 'youxi': 'YXS', + 'youxian': 'YOG', + 'youxiannan': 'YXG', + 'youyang': 'AFW', + 'yuanbaoshan': 'YUD', + 'yuandun': 'YAJ', + 'yuanmou': 'YMM', + 'yuanping': 'YPV', + 'yuanqian': 'AQK', + 'yuanshi': 'YSP', + 'yuantan': 'YTQ', + 'yuanyangzhen': 'YYJ', + 'yucheng': 'YCK', + 'yuchengxian': 'IXH', + 'yuci': 'YCV', + 'yudu': 'YDG', + 'yuechi': 'AWW', + 'yuejiajing': 'YGJ', + 'yueliangtian': 'YUM', + 'yueqing': 'UPH', + 'yueshan': 'YBF', + 'yuexi': 'YHW', + 'yueyang': 'YYQ', + 'yueyangdong': 'YIQ', + 'yuge': 'VTM', + 'yuhang': 'EVH', + 'yujiang': 'YHG', + 'yujiapu': 'YKP', + 'yuliangpu': 'YLD', + 'yulin': 'YLZ', + 'yumen': 'YXJ', + 'yunan': 'YKQ', + 'yuncailing': 'ACP', + 'yuncheng': 'YNV', + 'yunchengbei': 'ABV', + 'yundonghai': 'NAQ', + 'yunfudong': 'IXQ', + 'yunjusi': 'AFP', + 'yunlianghe': 'YEF', + 'yunmeng': 'YMN', + 'yunshan': 'KZQ', + 'yunxiao': 'YBS', + 'yuping': 'YZW', + 'yuquan': 'YQB', + 'yushan': 'YNG', + 'yushannan': 'YGG', + 'yushe': 'AUM', + 'yushi': 'YSJ', + 'yushu': 'YRT', + 'yushugou': 'YGP', + 'yushutai': 'YUT', + 'yushutun': 'YSX', + 'yutianxian': 'ATP', + 'yuxi': 'YXM', + 'yuyao': 'YYH', + 'yuyaobei': 'CTH', + 'zaolin': 'ZIV', + 'zaoqiang': 'ZVP', + 'zaoyang': 'ZYN', + 'zaozhuang': 'ZEK', + 'zaozhuangdong': 'ZNK', + 'zaozhuangxi': 'ZFK', + 'zengjiapingzi': 'ZBW', + 'zengkou': 'ZKE', + 'zepu': 'ZPR', + 'zerunli': 'ZLM', + 'zhalainuoerxi': 'ZXX', + 'zhalantun': 'ZTX', + 'zhalute': 'ZLD', + 'zhangbaiwan': 'ZUP', + 'zhangdang': 'ZHT', + 'zhanggutai': 'ZGD', + 'zhangjiajie': 'DIQ', + 'zhangjiakou': 'ZKP', + 'zhangjiakounan': 'ZMP', + 'zhanglan': 'ZLV', + 'zhangmutou': 'ZOQ', + 'zhangmutoudong': 'ZRQ', + 'zhangping': 'ZPS', + 'zhangpu': 'ZCS', + 'zhangqiao': 'ZQY', + 'zhangqiu': 'ZTK', + 'zhangshu': 'ZSG', + 'zhangshudong': 'ZOG', + 'zhangweitun': 'ZWB', + 'zhangwu': 'ZWD', + 'zhangxin': 'ZIP', + 'zhangye': 'ZYJ', + 'zhangyexi': 'ZEJ', + 'zhangzhou': 'ZUS', + 'zhangzhoudong': 'GOS', + 'zhanjiang': 'ZJZ', + 'zhanjiangxi': 'ZWQ', + 'zhaoan': 'ZDS', + 'zhaobai': 'ZBP', + 'zhaocheng': 'ZCV', + 'zhaodong': 'ZDB', + 'zhaofupu': 'ZFM', + 'zhaoguang': 'ZGB', + 'zhaohua': 'ZHW', + 'zhaoqing': 'ZVQ', + 'zhaoqingdong': 'FCQ', + 'zhaotong': 'ZDW', + 'zhashui': 'ZSY', + 'zhazi': 'ZAL', + 'zhelimu': 'ZLC', + 'zhenan': 'ZEY', + 'zhenchengdi': 'ZDV', + 'zhengding': 'ZDP', + 'zhengdingjichang': 'ZHP', + 'zhengxiangbaiqi': 'ZXC', + 'zhengzhou': 'ZZF', + 'zhengzhoudong': 'ZAF', + 'zhengzhouxi': 'XPF', + 'zhenjiang': 'ZJH', + 'zhenjiangnan': 'ZEH', + 'zhenlai': 'ZLT', + 'zhenping': 'ZPF', + 'zhenxi': 'ZVT', + 'zhenyuan': 'ZUW', + 'zhian': 'ZAD', + 'zhicheng': 'ZCN', + 'zhifangdong': 'ZMN', + 'zhijiang': 'ZPQ', + 'zhijiangbei': 'ZIN', + 'zhijin': 'IZW', + 'zhijinbei': 'ZJE', + 'zhongchuanjichang': 'ZJJ', + 'zhonghe': 'ZHX', + 'zhonghuamen': 'VNH', + 'zhongjiacun': 'ZJY', + 'zhongkai': 'KKQ', + 'zhongmu': 'ZGF', + 'zhongning': 'VNJ', + 'zhongningdong': 'ZDJ', + 'zhongningnan': 'ZNJ', + 'zhongshan': 'ZSQ', + 'zhongshanbei': 'ZGQ', + 'zhongshanxi': 'ZAZ', + 'zhongwei': 'ZWJ', + 'zhongxiang': 'ZTN', + 'zhongzhai': 'ZZM', + 'zhoujia': 'ZOB', + 'zhoujiatun': 'ZOD', + 'zhoukou': 'ZKN', + 'zhoushuizi': 'ZIT', + 'zhuanghebei': 'ZUT', + 'zhuangqiao': 'ZQH', + 'zhuangzhi': 'ZUX', + 'zhucheng': 'ZQK', + 'zhuhai': 'ZHQ', + 'zhuhaibei': 'ZIQ', + 'zhuji': 'ZDH', + 'zhujiagou': 'ZUB', + 'zhujiawan': 'CWJ', + 'zhujiayao': 'ZUJ', + 'zhumadian': 'ZDN', + 'zhumadianxi': 'ZLN', + 'zhuozhou': 'ZXP', + 'zhuozhoudong': 'ZAP', + 'zhuozidong': 'ZDC', + 'zhuozishan': 'ZZC', + 'zhurihe': 'ZRC', + 'zhuwo': 'ZOP', + 'zhuyangxi': 'ZXW', + 'zhuyuanba': 'ZAW', + 'zhuzhou': 'ZZQ', + 'zhuzhouxi': 'ZAQ', + 'zibo': 'ZBK', + 'zichang': 'ZHY', + 'zigong': 'ZGW', + 'zijingguan': 'ZYP', + 'zixi': 'ZXS', + 'ziyang': 'ZYW', + 'ziyangbei': 'FYW', + 'zizhong': 'ZZW', + 'zizhongbei': 'WZW', + 'zizhou': 'ZZY', + 'zongxi': 'ZOY', + 'zoucheng': 'ZIK', + 'zunyi': 'ZIW', + 'zuoling': 'ZSN'} diff --git a/scrapy/trainstation/ticket b/scrapy/trainstation/ticket new file mode 100644 index 0000000..d2172f5 --- /dev/null +++ b/scrapy/trainstation/ticket @@ -0,0 +1,97 @@ +#coding: utf-8 +""" Train tickets query via command-line + +Usage: + tickets [-gdtkz] + +Options: + -h, --help Help Menu + -g GaoSu + -d DongChe + -t TeKuai + -k KuaiSu + -z ZhiDa + +Example: + tickets beijing shenzhen 2016-10-10 +""" + +from docopt import docopt +from stations import stations +import requests +from prettytable import PrettyTable + +def colored(color, text): + table = { + 'Red': '\033[91m', + 'Green': '\033[92m', + 'Yellow':'\033[33m', + 'Blue':'\033[34m', + 'Fuchsia':'\033[35m', + 'Cyan':'\033[36m', + 'White':'\033[37m', + 'rest': '\033[0m' + } + cv = table.get(color) + rest = table.get('rest') + return '{}{}{}'.format(cv, text, rest) + + +class TrainCollection(): + TrainAttr = 'train station time duration first second softsleep hardsleep hardsit' + header = [] + for attr in TrainAttr.split(): + header.append(''.join(colored('Cyan', attr))) + + def __init__(self, rows): + self.rows = rows + + def _get_duration(self, row): + duration = row.get('lishi').replace(':', 'h')+'m' + if duration.startswith('00'): + return duration[4:] + if duration.startswith('0'): + return duration[1:] + return duration + + @property + def trains(self): + for row in self.rows: + train = [ + row['station_train_code'], + '\n'.join([colored('Green',row['from_station_name']), + colored('Red', row['to_station_name'])]), + '\n'.join([colored('Green', row['start_time']), + colored('Red', row['arrive_time'])]), + self._get_duration(row), + row['zy_num'], + row['ze_num'], + row['rw_num'], + row['yw_num'], + row['yz_num'] + ] + yield train + + def pretty_print(self): + pt = PrettyTable() + pt._set_field_names(self.header) + for train in self.trains: + pt.add_row(train) + print(pt) + + +def cli(): + arguments = docopt(__doc__) + from_station = stations.get(arguments['']) + to_station = stations.get(arguments['']) + date = arguments[''] + + url = 'https://kyfw.12306.cn/otn/lcxxcx/query?purpose_codes=ADULT&queryDate={}&from_station={}&to_station={}'.format(date, from_station, to_station) + r = requests.get(url, verify=False) + rows = r.json()['data']['datas'] + trains = TrainCollection(rows) + trains.pretty_print() + + +if __name__ == '__main__': + cli()