如何按ProjectID获取两张表中编程语言与框架的所有组合?
按ProjectID生成编程语言与框架的所有组合解决方案
核心思路
先将两个CSV表中的数据按ProjectID分组,分别收集每个项目对应的编程语言ID列表和框架ID列表;然后对每个同时存在于两个表中的ProjectID,用itertools.product生成语言与框架的笛卡尔积(即所有可能的组合),最后按要求格式输出。
方法一:使用Pandas处理(适合数据量较大或需要复杂数据操作的场景)
import pandas as pd import itertools # 读取两个CSV文件 lang_df = pd.read_csv('编程语言表.csv') framework_df = pd.read_csv('框架表.csv') # 按ProjectID分组,提取对应ID列表并转为字典 lang_groups = lang_df.groupby('ProjectID')['ProgrammingLanguageID'].apply(list).to_dict() framework_groups = framework_df.groupby('ProjectID')['FrameworkID'].apply(list).to_dict() # 遍历所有同时有语言和框架数据的项目 common_project_ids = set(lang_groups.keys()) & set(framework_groups.keys()) for project_id in common_project_ids: # 获取当前项目的语言和框架列表 lang_ids = lang_groups[project_id] framework_ids = framework_groups[project_id] # 生成所有组合并格式化输出 for lang_id, fw_id in itertools.product(lang_ids, framework_ids): print(f'(p{lang_id}, f{fw_id})')
方法二:使用标准库CSV模块处理(无需额外安装依赖)
import csv import itertools # 读取编程语言表并按ProjectID分组 lang_data = {} with open('编程语言表.csv', 'r', newline='', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: project_id = int(row['ProjectID']) lang_id = int(row['ProgrammingLanguageID']) lang_data.setdefault(project_id, []).append(lang_id) # 读取框架表并按ProjectID分组 framework_data = {} with open('框架表.csv', 'r', newline='', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: project_id = int(row['ProjectID']) fw_id = int(row['FrameworkID']) framework_data.setdefault(project_id, []).append(fw_id) # 生成并输出所有组合 common_project_ids = set(lang_data.keys()) & set(framework_data.keys()) for project_id in common_project_ids: for lang_id, fw_id in itertools.product(lang_data[project_id], framework_data[project_id]): print(f'(p{lang_id}, f{fw_id})')
内容的提问来源于stack exchange,提问作者Anais
相关产品推荐
相关产品推荐

