You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python字典键值遍历匹配问题:报错与结果长度不符的解决需求

城市坐标匹配字典生成错误修复

问题根源

  1. 数据类型错误:初始化finalDict时,"City"被设为字典{},但实际需要存储列表,字典没有append方法,直接导致'Dict' Object Has No Attribute 'Append'错误。
  2. 循环逻辑错误:原代码遍历的是第二个字典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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 06:31:11