在中国的地理信息系统中,自治州是重要的行政区划单位,共有30个自治州分布在多个省份。由于自治州名称较长(如“昌吉回族自治州”),在数据存储、分析或展示时,往往需要将其简化为短名称(如“昌吉”)。然而,不同自治州的简称规则不同,有的取前2字,有的取前4字,甚至有些需要特殊处理(如“巴音郭楞蒙古自治州” → “巴音郭楞”)。
本文将围绕 如何高效、精准地处理自治州名称,从问题分析、方案设计到代码实现,逐步讲解优化方法,并提供可直接复用的Python代码。
中国的自治州名称通常遵循以下结构:
[地名][民族名]自治州例如:
我们需要实现:
适用场景:输入数据严格等于自治州全称(如数据库存储的是标准化名称)。
方法:用字典存储自治州全称和短名称的映射关系,直接查询。
代码实现:
autonomous_prefecture_mapping = {
"昌吉回族自治州": "昌吉",
"巴音郭楞蒙古自治州": "巴音郭楞",
"克孜勒苏柯尔克孜自治州": "克孜勒苏",
"博尔塔拉蒙古自治州": "博尔塔拉",
# 其他自治州...
}
def process_city_name(city):
"""完全匹配模式:city 必须严格等于字典中的键"""
return autonomous_prefecture_mapping.get(city, city)优点:
缺点:
适用场景:输入数据可能是自治州的变体(如“昌吉市”“巴音郭楞县”)。
方法:检查输入是否以自治州的前缀开头(如“昌吉市”匹配“昌吉回族自治州”的前2字)。
代码实现:
def process_city_name(city):
"""模糊匹配模式:检查 city 是否以自治州前缀开头"""
for full_name, short_name in autonomous_prefecture_mapping.items():
if city.startswith(full_name[:2]): # 匹配前2字
return short_name
return city优点:
缺点:
适用场景:兼顾精准性和灵活性。
方法:
代码实现:
def process_city_name(city):
"""混合匹配模式:先完全匹配,再模糊匹配"""
# 1. 完全匹配
if city in autonomous_prefecture_mapping:
return autonomous_prefecture_mapping[city]
# 2. 模糊匹配
for full_name, short_name in autonomous_prefecture_mapping.items():
if city.startswith(full_name[:2]):
return short_name
return city # 无匹配则返回原值优点:
以下是可直接复用的完整代码,包含:
# 自治州全称到短名称的映射
autonomous_prefecture_mapping = {
# 新疆
"昌吉回族自治州": "昌吉",
"巴音郭楞蒙古自治州": "巴音郭楞",
"克孜勒苏柯尔克孜自治州": "克孜勒苏",
"博尔塔拉蒙古自治州": "博尔塔拉",
"伊犁哈萨克自治州": "伊犁",
# 青海
"海北藏族自治州": "海北",
"黄南藏族自治州": "黄南",
"海南藏族自治州": "海南",
"果洛藏族自治州": "果洛",
"玉树藏族自治州": "玉树",
"海西蒙古族藏族自治州": "海西",
# 四川
"阿坝藏族羌族自治州": "阿坝",
"甘孜藏族自治州": "甘孜",
"凉山彝族自治州": "凉山",
# 云南(部分)
"楚雄彝族自治州": "楚雄",
"红河哈尼族彝族自治州": "红河",
"文山壮族苗族自治州": "文山",
"西双版纳傣族自治州": "西双版纳",
"大理白族自治州": "大理",
}
def process_city_name(city):
"""处理城市名称:返回自治州的短名称"""
# 1. 完全匹配
if city in autonomous_prefecture_mapping:
return autonomous_prefecture_mapping[city]
# 2. 模糊匹配(前缀)
for full_name, short_name in autonomous_prefecture_mapping.items():
if city.startswith(full_name[:2]):
return short_name
return city # 默认返回原值
# 测试用例
test_cases = [
"昌吉回族自治州", # -> "昌吉"
"巴音郭楞蒙古自治州", # -> "巴音郭楞"
"昌吉市", # -> "昌吉"
"大理白族自治州", # -> "大理"
"成都市", # -> "成都市"(无匹配)
]
for city in test_cases:
print(f"输入:{city}\t输出:{process_city_name(city)}")输出结果:
输入:昌吉回族自治州 输出:昌吉
输入:巴音郭楞蒙古自治州 输出:巴音郭楞
输入:昌吉市 输出:昌吉
输入:大理白族自治州 输出:大理
输入:成都市 输出:成都市在爬虫或数据库ETL中,规范化地名数据:
data = [
{"city": "昌吉回族自治州", "address": "..."},
{"city": "昌吉市", "address": "..."},
]
for item in data:
item["city"] = process_city_name(item["city"])在物流或电商系统中,缩短地址显示:
原始地址:新疆巴音郭楞蒙古自治州库尔勒市人民路1号
优化后:新疆巴音郭楞库尔勒市人民路1号在地图中显示短名称,节省空间:
"昌吉回族自治州" → "昌吉"
"克孜勒苏柯尔克孜自治州" → "克孜勒苏"本文通过分析中国自治州名称的特点,提出了三种优化方案:
最终给出的 Python实现 可直接用于数据清洗、地址处理等场景。如果需要更复杂的规则(如有的自治州取3字),只需扩展映射表即可。
核心思想:
希望本文能帮助你高效处理自治州数据!