把复杂问题简单化
1 列出【部分】【最简单的】原始数据,和想要的数据
2 要清楚每一步在干嘛 log log=print
provice = [{
"name": "北京市",
"id": "110000000000"
}, {
"name": "天津市",
"id": "120000000000"
}, {
"name": "河北省",
"id": "130000000000"
}, {
"name": "山西省",
"id": "140000000000"
}, {
"name": "内蒙古自治区",
"id": "150000000000"
}, {
"name": "辽宁省",
"id": "210000000000"
}, {
"name": "吉林省",
"id": "220000000000"
}, {
"name": "黑龙江省",
"id": "230000000000"
}, {
"name": "上海市",
"id": "310000000000"
}, {
"name": "江苏省",
"id": "320000000000"
}, {
"name": "浙江省",
"id": "330000000000"
}, {
"name": "安徽省",
"id": "340000000000"
}, {
"name": "福建省",
"id": "350000000000"
}, {
"name": "江西省",
"id": "360000000000"
}, {
"name": "山东省",
"id": "370000000000"
}, {
"name": "河南省",
"id": "410000000000"
}, {
"name": "湖北省",
"id": "420000000000"
}, {
"name": "湖南省",
"id": "430000000000"
}, {
"name": "广东省",
"id": "440000000000"
}, {
"name": "广西壮族自治区",
"id": "450000000000"
}, {
"name": "海南省",
"id": "460000000000"
}, {
"name": "重庆市",
"id": "500000000000"
}]
ccity = {
"110000000000": [
{
"city": "市辖区",
"name": "东城区",
"id": "110101000000"
},
{
"city": "市辖区",
"name": "西城区",
"id": "110102000000"
},
{
"city": "市辖区",
"name": "朝阳区",
"id": "110105000000"
},
{
"city": "市辖区",
"name": "丰台区",
"id": "110106000000"
},
{
"city": "市辖区",
"name": "石景山区",
"id": "110107000000"
},
{
"city": "市辖区",
"name": "海淀区",
"id": "110108000000"
},
{
"city": "市辖区",
"name": "门头沟区",
"id": "110109000000"
},
{
"city": "市辖区",
"name": "房山区",
"id": "110111000000"
},
{
"city": "市辖区",
"name": "通州区",
"id": "110112000000"
},
{
"city": "市辖区",
"name": "顺义区",
"id": "110113000000"
},
{
"city": "市辖区",
"name": "昌平区",
"id": "110114000000"
},
{
"city": "市辖区",
"name": "大兴区",
"id": "110115000000"
},
{
"city": "市辖区",
"name": "怀柔区",
"id": "110116000000"
},
{
"city": "市辖区",
"name": "平谷区",
"id": "110117000000"
},
{
"city": "市辖区",
"name": "密云区",
"id": "110118000000"
},
{
"city": "市辖区",
"name": "延庆区",
"id": "110119000000"
}
],
"120000000000": [
{
"city": "市辖区",
"name": "和平区",
"id": "120101000000"
},
{
"city": "市辖区",
"name": "河东区",
"id": "120102000000"
},
{
"city": "市辖区",
"name": "河西区",
"id": "120103000000"
},
{
"city": "市辖区",
"name": "南开区",
"id": "120104000000"
},
{
"city": "市辖区",
"name": "河北区",
"id": "120105000000"
},
{
"city": "市辖区",
"name": "红桥区",
"id": "120106000000"
},
{
"city": "市辖区",
"name": "东丽区",
"id": "120110000000"
},
{
"city": "市辖区",
"name": "西青区",
"id": "120111000000"
},
{
"city": "市辖区",
"name": "津南区",
"id": "120112000000"
},
{
"city": "市辖区",
"name": "北辰区",
"id": "120113000000"
},
{
"city": "市辖区",
"name": "武清区",
"id": "120114000000"
},
{
"city": "市辖区",
"name": "宝坻区",
"id": "120115000000"
},
{
"city": "市辖区",
"name": "滨海新区",
"id": "120116000000"
},
{
"city": "市辖区",
"name": "宁河区",
"id": "120117000000"
},
{
"city": "市辖区",
"name": "静海区",
"id": "120118000000"
},
{
"city": "市辖区",
"name": "蓟州区",
"id": "120119000000"
},
{
"city": "市辖区",
"name": "和平区",
"id": "120101000000"
},
{
"city": "市辖区",
"name": "河东区",
"id": "120102000000"
},
{
"city": "市辖区",
"name": "河西区",
"id": "120103000000"
},
{
"city": "市辖区",
"name": "南开区",
"id": "120104000000"
},
{
"city": "市辖区",
"name": "河北区",
"id": "120105000000"
},
{
"city": "市辖区",
"name": "红桥区",
"id": "120106000000"
},
{
"city": "市辖区",
"name": "东丽区",
"id": "120110000000"
},
{
"city": "市辖区",
"name": "西青区",
"id": "120111000000"
},
{
"city": "市辖区",
"name": "津南区",
"id": "120112000000"
},
{
"city": "市辖区",
"name": "北辰区",
"id": "120113000000"
},
{
"city": "市辖区",
"name": "武清区",
"id": "120114000000"
},
{
"city": "市辖区",
"name": "宝坻区",
"id": "120115000000"
},
{
"city": "市辖区",
"name": "滨海新区",
"id": "120116000000"
},
{
"city": "市辖区",
"name": "宁河区",
"id": "120117000000"
},
{
"city": "市辖区",
"name": "静海区",
"id": "120118000000"
},
{
"city": "市辖区",
"name": "蓟州区",
"id": "120119000000"
}
],
"130000000000": [
{
"province": "河北省",
"name": "石家庄市",
"id": "130100000000"
},
{
"province": "河北省",
"name": "唐山市",
"id": "130200000000"
},
{
"province": "河北省",
"name": "秦皇岛市",
"id": "130300000000"
},
{
"province": "河北省",
"name": "邯郸市",
"id": "130400000000"
},
{
"province": "河北省",
"name": "邢台市",
"id": "130500000000"
},
{
"province": "河北省",
"name": "保定市",
"id": "130600000000"
},
{
"province": "河北省",
"name": "张家口市",
"id": "130700000000"
},
{
"province": "河北省",
"name": "承德市",
"id": "130800000000"
},
{
"province": "河北省",
"name": "沧州市",
"id": "130900000000"
},
{
"province": "河北省",
"name": "廊坊市",
"id": "131000000000"
},
{
"province": "河北省",
"name": "衡水市",
"id": "131100000000"
}
],
"140000000000": [
{
"province": "山西省",
"name": "太原市",
"id": "140100000000"
},
{
"province": "山西省",
"name": "大同市",
"id": "140200000000"
},
{
"province": "山西省",
"name": "阳泉市",
"id": "140300000000"
},
{
"province": "山西省",
"name": "长治市",
"id": "140400000000"
},
{
"province": "山西省",
"name": "晋城市",
"id": "140500000000"
},
{
"province": "山西省",
"name": "朔州市",
"id": "140600000000"
},
{
"province": "山西省",
"name": "晋中市",
"id": "140700000000"
},
{
"province": "山西省",
"name": "运城市",
"id": "140800000000"
},
{
"province": "山西省",
"name": "忻州市",
"id": "140900000000"
},
{
"province": "山西省",
"name": "临汾市",
"id": "141000000000"
},
{
"province": "山西省",
"name": "吕梁市",
"id": "141100000000"
}
]
}
# 因为省市数据太多会导致重复审核不通过 所以删减了部分数据
log = print
'''
def bb():
# list=[]
d = {}
pro = {}
ci = {}
l = []
t = {}
for p in provice:
pro = dict()
pro['province'] = {'id': p['id'], 'name': p['name']}
for c in city[p['id']]:
print(c['id'], c['name'])
t = {'id': c['id'], 'name': c['name']}
pro.setdefault('city', []).append(t)
l.append(pro)
print(pro)
print('-' * 30, '以下是列表', '-' * 100)
print(l)
print(l)
'''
'''
def clear_city_information(city):
# city = list
for c in city:
del c['city']
return city
'''
def get_result(b, c):
# log('b', b)
# log('c', c)
result = []
for i in b:
# log('i', i)
province = i
province_id = i.get('id')
city = c.get(province_id)
# log('city', city)
iu = del_city_or_province(city)
province['city'] = city
result.append(province)
# log('result', result)
return result
def data():
b = [{
"name": "北京市",
"id": "110000000000"
}]
c = {
"110000000000": [{
"city": "市辖区",
"name": "东城区",
"id": "110101000000",
}]
}
e = [
{
"id": "110000000000",
"name": "北京市",
'city': [
{
"name": "东城区",
"id": "110101000000",
}
]
}
]
b=provice
c=ccity
ee = get_result(b, c)
#log('b',b)
#log('c',c)
log('ee', ee)
'''
if ee != e:
log('ni co le', ee, e)
else:
log('你好棒啊! 你写对了!!!')
'''
def del_city_or_province(a):
# log('a', a)
r = []
for i in a:
#log('i', i)
if 'city' in i.keys():
del i['city']
else:
del i['province']
#log('iiiii', i)
r.append(i)
return r
def iu():
a = [{'city': '市辖区', 'name': '东城区', 'id': '110101000000'}]
b = [{'name': '东城区', 'id': '110101000000'}]
xixi = del_city_or_province(a)
if xixi != b:
log('ni co le')
else:
log('你好棒啊! 你写对了!!!')
def main():
data()
#iu()
if __name__ == '__main__':
main()
'''
if p['name'] == '北京市':
p_id = p['id']
log(p_id)
c = city[p_id]
log('c', c)
'''
from test_for_learn.final import get_province_city_list
log = print
def data():
a = get_province_city_list()
'''
a = [
{'name': '北京市',
'id': '110000000000',
'city': [
{'name': '东城区', 'id': '110101000000'
},
{'name': '西城区', 'id': '110102000000'
},
{'name': '朝阳区', 'id': '110105000000'
},
{'name': '丰台区', 'id': '110106000000'
},
{'name': '石景山区', 'id': '110107000000'
},
{'name': '海淀区', 'id': '110108000000'
},
{'name': '门头沟区', 'id': '110109000000'
},
{'name': '房山区', 'id': '110111000000'
},
{'name': '通州区', 'id': '110112000000'
},
{'name': '顺义区', 'id': '110113000000'
},
{'name': '昌平区', 'id': '110114000000'
},
{'name': '大兴区', 'id': '110115000000'
},
{'name': '怀柔区', 'id': '110116000000'
},
{'name': '平谷区', 'id': '110117000000'
},
{'name': '密云区', 'id': '110118000000'
},
{'name': '延庆区', 'id': '110119000000'
}
]
}
]
'''
log(
get_province_id(a, '福建省'),
get_city_id(a, '中山市'),
get_info_from_id(a, '110101000000')
)
def del_city_or_province(city_data):
"""删除原始city数据里多余的city或province字段"""
city_list = []
for c in city_data:
if 'city' in c.keys():
del c['city']
else:
del c['province']
city_list.append(c)
log('city_list',city_list)
return city_list
def is_municipality(city):
"""判断是不是直辖市"""
municipality = ['北京市', '天津市', '上海市', '重庆市']
if city in municipality:
return True
else:
return False
def get_no_municipality_id(province_city_info, city_name):
"""获得非直辖市城市的id"""
city_id = ''
for province in province_city_info:
for city in province['city']:
if city_name == city['name']:
city_id = city['id']
return city_id
log('no_municipality_id', city_id)
return city_id
def get_province_id(province_city_info, province_name):
"""获得省份名称的id"""
province_id = ''
for province in province_city_info:
if province_name == province['name']:
province_id = province['id']
log('province_id', province_id)
return province_id
log('province_id', province_id)
return province_id
def get_city_id(province_city_info, city_name):
"""获得城市名称的id"""
# 如果城市是直辖市,对应的是省份
if is_municipality(city_name):
city_id = get_province_id(province_city_info, city_name)
else:
city_id = get_no_municipality_id(province_city_info, city_name)
log('city_id', city_id)
return city_id
def get_info_from_id(province_city_info, search_id):
"""从id获得省/市的类型和名称"""
info = {}
for province in province_city_info:
if search_id == province['id']:
info['type'] = '省'
info['name'] = province['name']
log('info',info)
return info
else:
info = get_city_info_from_id(province, search_id)
log('info', info)
return info
return info
def get_city_info_from_id(province:dict, search_id):
info = {}
for city in province['city']:
if search_id == city['id']:
info['type'] = '市'
info['name'] = city['name']
return info
return info
'''
def is_municipality(city):
municipality = ['北京市', '天津市', '上海市', '重庆市']
if city in municipality:
return True
else:
return False
def get_province(a, province):
for i in a:
if province in i['name']:
province_id = i['id']
log('province_id', province_id)
return province_id
def get_city(a, city):
if is_municipality(city):
get_province(a, city)
else:
for i in a:
#log('i', i)
#log('-'*100)
#log('city', i['city'])
for j in i['city']:
if city in j['name']:
city_id = j['id']
log('city_id', city_id)
return city_id
def get_type(a,id):
info = {}
for i in a:
if id == i['id']:
#info['type'] = i['name'][-1]
info['type'] = '省'
info['name'] = i['name']
# log('name',i['name'])
# log('type',info['type'])
# log('info',info)
else:
for j in i['city']:
if id == j['id']:
#info['type'] = j['name'][-1]
info['type'] = '市'
info['name'] = j['name']
log('info', info)
return info
'''
def main():
data()
if __name__ == '__main__':
main()
最终得到结果