如何将含重复元素的国家列表与城市列表构建为多值字典
如何将对应国家和城市列表转换为国家-城市列表字典
你需要将两个长度一致的列表(含重复元素的国家列表、对应位置的城市列表)转换为以国家为键、对应城市列表为值的字典,以下是问题分析和解决方案:
你的代码存在的问题
- 字符串未加引号:
USA、Chicago等标识符未用引号包裹,会被Python视为变量而非字符串,运行时会报错(若未定义这些变量) - 嵌套循环逻辑错误:外层遍历国家、内层遍历所有城市,会导致每个国家与所有城市错误绑定,完全不符合两个列表的对应关系
- 字典结构设计错误:目标字典应以国家为键,而非用
'Countries'和'Cities'作为顶层键
正确实现方法
方法1:基础循环+zip配对
countries_list = ['USA', 'USA', 'CHINA', 'CANADA', 'CANADA'] cities_list = ['Chicago', 'NY', 'Beijing', 'Vancouver', 'Toronto'] result = {} # 用zip将两个列表的对应元素一一配对 for country, city in zip(countries_list, cities_list): # 若国家不在字典中,先创建空列表 if country not in result: result[country] = [] # 将对应城市添加到列表中 result[country].append(city) print(result)
方法2:使用collections.defaultdict(更简洁)
from collections import defaultdict countries_list = ['USA', 'USA', 'CHINA', 'CANADA', 'CANADA'] cities_list = ['Chicago', 'NY', 'Beijing', 'Vancouver', 'Toronto'] # defaultdict会自动为不存在的键创建空列表 result = defaultdict(list) for country, city in zip(countries_list, cities_list): result[country].append(city) # 如需转为普通字典,可使用dict(result) print(dict(result))
输出结果
两种方法都会得到你想要的字典:
{'USA': ['Chicago', 'NY'], 'CHINA': ['Beijing'], 'CANADA': ['Vancouver', 'Toronto']}
内容的提问来源于stack exchange,提问作者Michael S
相关产品推荐
相关产品推荐

