Python字典实操需求:根据主题映射关联城市归属
主题分类映射问题的Python解决方案
嘿,我来帮你搞定这个城市与主题分类的映射问题,先把相关的输入、需求和解决方案理清楚:
输入数据
首先是给定的几个核心数据结构:
theme = { 'ADV': ['RAF', 'WS', 'BJ'], 'BC': ['B', 'SS', 'S'], 'LS': ['WF', 'SS'] } names = ['Dubai', 'India', 'Monacco'] all_themes = { 'Dubai': {'RAF', 'B'}, 'India': {'WF', 'SS'} }
期望输出示例
我们需要生成这样格式的结果:
{ 'Dubai': ['ADV', 'BC'], 'India': ['LS', 'BC'], 'Monacco': [] }
(注:示例里的IS应该是笔误,正确的分类标识是LS)
需求说明
遍历names列表中的每个城市,依次检查all_themes中对应城市的主题集合;若集合中的任意值存在于theme字典某一键对应的列表中,则将该键(主题分类)关联至该城市,最终生成上述格式的输出结果。
实现思路与代码
这个需求的核心是检查城市的主题集合和每个分类的主题列表是否有交集,我们可以用Python的集合操作来高效实现:
- 先创建一个空字典来存储最终结果
- 逐个遍历每个城市,获取该城市对应的主题集合(如果城市不在all_themes里,就用空集合)
- 遍历theme字典的每个分类和对应的主题值列表,把列表转成集合后和城市的主题集合求交集
- 如果交集不为空,说明这个分类属于该城市,把分类名加入到城市的结果列表中
- 最后把结果列表赋值给结果字典中对应的城市键
具体代码如下:
theme = { 'ADV': ['RAF', 'WS', 'BJ'], 'BC': ['B', 'SS', 'S'], 'LS': ['WF', 'SS'] } names = ['Dubai', 'India', 'Monacco'] all_themes = { 'Dubai': {'RAF', 'B'}, 'India': {'WF', 'SS'} } # 初始化结果字典 city_category_map = {} for city in names: # 获取当前城市的主题集合,没有的话返回空集合 current_city_themes = all_themes.get(city, set()) matched_categories = [] for category, theme_values in theme.items(): # 把主题列表转成集合,方便快速求交集 theme_set = set(theme_values) # 如果有交集,说明该分类匹配当前城市 if current_city_themes & theme_set: matched_categories.append(category) city_category_map[city] = matched_categories # 打印最终结果 print(city_category_map)
运行这段代码后,输出结果为:
{'Dubai': ['ADV', 'BC'], 'India': ['BC', 'LS'], 'Monacco': []}
如果需要让分类列表的顺序和示例完全一致(比如India的列表是['LS', 'BC']),可以在收集完匹配分类后对matched_categories进行排序,或者调整theme字典的定义顺序(Python 3.7+的字典是按插入顺序保存的)。
内容的提问来源于stack exchange,提问作者Ajay Shewale
相关产品推荐
相关产品推荐

