Python中判断两字典值是否有交集?TypeError报错求助
问题分析与解决方案
错误原因
- TypeError触发根源:
dict1.values()返回的是列表对象(比如['Buenos Aires']),而列表属于不可哈希类型,无法直接转换为集合,执行set(d1.values())时会抛出TypeError: unhashable type: 'list'。 - 逻辑完全偏离需求:当前函数没有使用传入的
id和country参数,只是盲目比较两个字典所有值的集合,完全不符合“检查指定国家的城市列表与指定ID对应的城市是否存在交集”的需求。
修正后的实现
根据需求,我们需要完成三个核心步骤:
- 从
dict1中获取指定国家对应的城市列表 - 从
dict2中获取指定ID对应的城市 - 验证该城市是否存在于上述列表中(即判断两者是否有交集)
修正后的函数代码:
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
相关产品推荐
相关产品推荐

