Python字典键值遍历匹配问题:报错与结果长度不符的解决需求
城市坐标匹配字典生成错误修复
问题根源
- 数据类型错误:初始化
finalDict时,"City"被设为字典{},但实际需要存储列表,字典没有append方法,直接导致'Dict' Object Has No Attribute 'Append'错误。 - 循环逻辑错误:原代码遍历的是第二个字典
d2的所有键,而非第一个字典中的目标城市列表,导致结果长度超出预期,且错误地为d2中所有不匹配的城市添加默认值。
修正方案
步骤1:预处理第二个字典(优化匹配效率)
先把d2转换成以无后缀城市名为键的映射字典,方便后续快速匹配:
# 预处理d2,建立无后缀城市名到(完整名称, X坐标, Y坐标)的映射 city_map = {} for full_name, coords in d2.items(): # 提取括号前的城市名 base_name = full_name.split(' (')[0] city_map[base_name] = (full_name, coords[1], coords[0]) # 对应期望输出的坐标顺序
步骤2:遍历目标城市列表生成结果
遍历第一个字典中的城市列表,逐个匹配映射字典,无匹配则使用默认值:
listCities = d["City"] finalDict = {"City": [], 'POINT_X': [], 'POINT_Y': []} conversionDefault = 'Unknown (UNK)' DefaultX = 24.35 # 直接转为浮点数,避免重复转换 DefaultY = 25.35 for city in listCities: if city in city_map: full_name, x, y = city_map[city] finalDict["City"].append(full_name) finalDict["POINT_X"].append(x) finalDict["POINT_Y"].append(y) else: finalDict["City"].append(conversionDefault) finalDict["POINT_X"].append(DefaultX) finalDict["POINT_Y"].append(DefaultY)
验证输出
运行修正后的代码,得到的finalDict与期望输出完全一致:
print(finalDict) # 输出: {'City': ['Algeciras (ESP)', 'Piraeus (GRC)', 'Genoa (ITA)', 'Unknown (UNK)'], 'POINT_X': [11.735, 30.0780555556, 33.1772222222, 24.35], 'POINT_Y': [33.095, 31.31, 28.8961111111, 25.35]}
内容的提问来源于stack exchange,提问作者Jsankari
相关产品推荐
相关产品推荐

