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

Python中判断两字典值是否有交集?TypeError报错求助

问题分析与解决方案

错误原因

  • TypeError触发根源:dict1.values()返回的是列表对象(比如['Buenos Aires']),而列表属于不可哈希类型,无法直接转换为集合,执行set(d1.values())时会抛出TypeError: unhashable type: 'list'。
  • 逻辑完全偏离需求:当前函数没有使用传入的id和country参数,只是盲目比较两个字典所有值的集合,完全不符合“检查指定国家的城市列表与指定ID对应的城市是否存在交集”的需求。

修正后的实现

根据需求,我们需要完成三个核心步骤:

  1. 从dict1中获取指定国家对应的城市列表
  2. 从dict2中获取指定ID对应的城市
  3. 验证该城市是否存在于上述列表中(即判断两者是否有交集)

修正后的函数代码:

def check_city_overlap(d1, d2, city_id, country):
    # 获取指定国家的城市列表,若国家不存在则返回空列表
    country_cities = d1.get(country, [])
    # 获取指定ID对应的城市,若ID不存在则返回None
    target_city = d2.get(city_id)
    # 检查目标城市是否在国家城市列表中
    return target_city in country_cities

测试验证

先补全原代码中dict1缺失的闭合},再调用测试:

dict1 = {
    'Argentina': ['Buenos Aires'],
    'Bangladesh': ['Dhaka'],
    'Brazil': ['São Paulo', 'Rio de Janeiro']
}

dict2 = {
    1392685764: 'Tokyo', 1356226629: 'Mumbai', 1156073548: 'Shanghai',
    1484247881: 'Mexico City', 1156237133: 'Guangzhou', 1818253931: 'Cairo',
    1156228865: 'Beijing', 1840034016: 'New York', 1643318494: 'Moscow',
    1764068610: 'Bangkok', 1050529279: 'Dhaka', 1032717330: 'Buenos Aires'}

# 传入指定参数调用
result = check_city_overlap(dict1, dict2, 1032717330, 'Argentina')
print(result)  # 输出: True

内容的提问来源于stack exchange,提问作者tucomax

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:15:29