如何基于经纬度匹配两个JSON数据集并按名称ID分组
解决方案
首先需要修正你的Dataset1.json格式——原示例存在重复键,不符合JSON规范,正确格式应该是包含多个经纬度对象的数组:
[ {"lat": 12, "lon": 13}, {"lat": 14, "lon": 15} ]
以下是用Python实现的匹配逻辑,严格遵循你“遍历两个数据集、通过经纬度关联”的要求:
import json # 1. 加载并解析两个数据集 with open("Dataset1.json", "r") as f: dataset1 = json.load(f) with open("ControlData.json", "r") as f: # 适配ControlData每行一个JSON对象的格式 control_data = [json.loads(line.strip()) for line in f if line.strip()] # 2. 构建经纬度到设备信息的映射,提升匹配效率 lat_lon_map = {} for device in control_data: key = (device["lat"], device["lon"]) lat_lon_map[key] = {"name": device["name"], "id": device["id"]} # 3. 遍历Dataset1,匹配并收集结果 matched_results = [] for coord in dataset1: current_key = (coord["lat"], coord["lon"]) if current_key in lat_lon_map: device_info = lat_lon_map[current_key] matched_results.append({ "name": device_info["name"], "id": device_info["id"], "lat": coord["lat"], "lon": coord["lon"] }) # 4. 格式化输出目标表格 print(f"{'Name':<6}{'ID':<4}{'lat':<8}{'lon':<8}") for item in matched_results: print(f"{item['name']:<6}{item['id']:<4}{item['lat']:<8}{item['lon']:<8}")
代码说明:
- 先将
ControlData转换成经纬度为键的字典,避免每次匹配都遍历整个控制数据集,提升效率 - 遍历
Dataset1的每个经纬度,在映射中查找对应设备信息,匹配成功则加入结果列表 - 最后用格式化字符串输出符合要求的表格样式
执行后输出如下:
Name ID lat lon A 1 12 13 B 2 14 15
内容的提问来源于stack exchange,提问作者data-help
相关产品推荐
相关产品推荐

