您好,我目前正在编写一个函数,将包含街道名称,病房名称,区域名称和城市名称的地址数组转换为显示位置代码的对象(街道代码,区域代码,区域代码和城市代码都可以来自一个json文件)上面的每个数组元素
例如,输出对象的格式应如下所示:
{city_name:city_code,district_name:district_code,ward_name: ward_code,street_name:street_code}
当前正在处理一个示例(数组可以像3个元素一样随机排序,或者我为什么要使用for循环来搜索4个元素或元素随机)这样的位置数组:
['ĐườngLêQuangĐịnh','Phường11','BìnhThạnh','HồChíMinh']
输出:
{'ĐườngLêQuangĐịnh':street_code,'Phường11':ward_code,'Bình Thạnh':区号,'HồChíMinh':city_code}
或者可能是这样:
['Phường11','ĐườngLêQuangĐịnh','BìnhThạnh','HồChíMinh']
输出:
{'Phường11':ward_code,'ĐườngLêQuangĐịnh':street_code,'Bình Thạnh':区号,'HồChíMinh':city_code}
或者这个:
['ĐườngLêQuangĐịnh','BìnhThạnh','HồChíMinh']
输出:
{'ĐườngLêQuangĐịnh':street_code,“BìnhThạnh”:district_code,“Hồ” 齐明(ChíMinh):city_code}
或一些随机的门牌号(如果在JSON查找中找不到,它将返回空字符串):
['门牌号码35','ĐườngLêQuangĐịnh','BìnhThạnh','HồChíMinh']
输出:
{'house number 35':'','ĐườngLêQuangĐịnh':street_code,'Bình Thạnh':区号,'HồChíMinh':city_code}
因此数组可以是任何地址,这就是为什么我使用for循环搜索该数组中的每个元素并与JSON比较以获取该特定元素的位置代码的原因
包含位置代码的json文件(reform_address.json)超过10000行,但我将张贴我当前遇到问题的代码:
{
"Hồ Chí Minh": {
"cityCode":"SG",
"districts":{
"Bình Thạnh":{
"districtCode":"66",
"wards":{
"Phường 1":"8881",
"Phường 2":"8883",
"Phường 3":"8884",
"Phường 5":"8885",
"Phường 6":"8886",
"Phường 7":"8887",
"Phường 11":"8889", <-correct ward_code
},
"streets":{
"Đường Phạm Văn Đồng":"1433",
"Đường Trường Sa":"1485",
"Đường Lê Quang Định":"1428",<-- correct street_code
"Đường Lam Sơn":"1600",
"Đường Huỳnh Tịnh Của":"1603",
"Đường Đống Đa":"1652",
}
}
}
}
"Đồng Tháp":{
"cityCode":"DDT",
"districts":{
"Cao Lãnh":{
"districtCode":"721",
"wards":{
"Phường 1":"6898",
"Phường 2":"6899",
"Phường 3":"6901",
"Phường 4":"6902",
"Phường 6":"6903",
"Phường 11":"6904"<- output but it's not correct ward_code
},
"streets":{
"Đường Lê Quang Định":"1530", <- output but it's not correct street_code
"Đường Nguyễn Chí Thanh":"70",
"Đường Huỳnh Thúc Kháng":"78",
"Đường Lê Duẩn":"89",
"Đường Đinh Công Tráng":"99",
}
}
}
}
}
您可以看到json文件具有以下格式:
{
city_name:{
"cityCode": city_code,
"district":{
district_name:{
"districCode": district_code,
"wards": {
ward_name: ward_code
},
"streets": {
street_name: street_code
}
}
}
}
}
我编写的用于查找位置数组中每个元素位置的函数:
convert.py:
def loopJson():
arrs = ['Đường Lê Quang Định', 'Phường 11', 'Bình Thạnh', 'Hồ Chí Minh']
with open('reform_address.json','r') as jfile:
j_data = json.load(jfile)
a = {}
new_cities = {}
for value in reversed(arrs):
for cityName in j_data.keys():
if value == cityName:
new_cities[value] = j_data[value]['cityCode']
for districtName in j_data[cityName]['districts'].keys():
if value == districtName:
new_cities[value] = j_data[cityName]['districts'][value]['districtCode']
for wardName in j_data[cityName]['districts'][districtName]['wards'].keys():
if value == wardName:
new_cities[value] = j_data[cityName]['districts'][districtName]['wards'][value]
for streetName in j_data[cityName]['districts'][districtName]['streets'].keys():
if value == streetName:
new_cities[value] = j_data[cityName]['districts'][districtName]['streets'][value]
a.update(new_cities)
print(a)
loopJson()
在JSON位置的代码中,某些病房和街道名称将重复,但它们属于不同的城市
我得到的函数的返回对象是
{'HồChíMinh':'SG','BìnhThạnh':'66','Phường11':'6904','Đường LêQuangĐịnh':'1530'}
该对象的第三个元素和第四个元素的位置代码错误,因为6904和1530不属于HồChíMinh市,但它位于ĐồngTháp市
预期正确的结果应该是:
{'HồChíMinh':'SG','BìnhThạnh':'66','Phường11':'8889','Đường LêQuangĐịnh':'1428'}
我在做什么错?任何帮助将不胜感激:)
编辑: 我编辑了我的问题,以更详细地描述此功能的作用,即获取任何地址输入数组并从类似于JSON文件的JSON文件中查找位置代码
我忘了说输入数组在我第一次发布时可能是位置的任何随机元素,所以这是我的错
答案 0 :(得分:1)
您太辛苦了:使用arrs
,您就可以将密钥输入数据中,而无需使用for
循环进行搜索。解决此问题的最佳方法是打开Python解释器并处理数据。这是建议的解决方案:
import json
def main():
with open('reform_address.json') as jfile:
data = json.load(jfile)
arrs = ['Đường Lê Quang Định', 'Phường 11', 'Bình Thạnh', 'Hồ Chí Minh']
street, ward, district, city = arrs
try:
city_code = data[city]['cityCode']
district_code = data[city]['districts'][district]['districtCode']
ward_code = data[city]['districts'][district]['wards'][ward]
street_code = data[city]['districts'][district]['streets'][street]
converted = {city: city_code, district: district_code, ward: ward_code, street: street_code}
print(converted)
except KeyError as e:
print('Address not found:', e)
if __name__ == '__main__':
main()
arrs
作为密钥,我们可以直接访问city_code
到district_code
的{{1}},ward_code
,city_code
converted
字典。arrs
中的数据错误,那么我们将遇到一个KeyError
,该消息应说明未找到哪条信息(城市,地区,...) 答案 1 :(得分:1)
希望这将帮助您到达需要的地方。它将每个不同的城市\字典添加到列表中。
set_issubset()