如何读取CSV文件并转换为键对应值列表的Map键值对
嘿,这个需求很典型,我给你分享几种主流编程语言的实现方案,你可以根据自己的技术栈来选:
Java 实现方案
在Java里,我们可以借助基础的IO类和集合框架来完成这个转换,不用依赖第三方库的话可以这么写:
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class CsvToMapConverter { public static void main(String[] args) { String csvFilePath = "your-file-path.csv"; // 替换成你的CSV文件路径 Map<String, List<String>> resultMap = new HashMap<>(); try (BufferedReader br = new BufferedReader(new FileReader(csvFilePath))) { String line; // 跳过表头行 br.readLine(); while ((line = br.readLine()) != null) { // 按逗号分割每行数据,注意如果CSV里有带逗号的字段需要更复杂的解析,这里假设没有 String[] parts = line.split(","); if (parts.length == 2) { String value = parts[0].trim(); String key = parts[1].trim(); // 如果key不存在,先初始化对应的List resultMap.computeIfAbsent(key, k -> new ArrayList<>()).add(value); } } } catch (IOException e) { e.printStackTrace(); } // 打印结果 System.out.println(resultMap); } }
关键说明:
computeIfAbsent方法可以简化逻辑:如果Map里没有对应的key,就创建一个新的ArrayList,然后把value加进去;如果已经有key,直接往对应的List里加value。- 这里默认CSV里没有带逗号的字段,如果有这种情况,建议用OpenCSV这类第三方库来解析,避免手动分割出错。
Python 实现方案
Python处理这种需求更简洁,有两种常用方式:
方式1:用标准库csv模块
import csv from collections import defaultdict csv_file_path = "your-file-path.csv" # 替换成你的CSV文件路径 result_map = defaultdict(list) with open(csv_file_path, mode='r', newline='', encoding='utf-8') as file: reader = csv.DictReader(file) for row in reader: value = row['value'].strip() key = row['key'].strip() result_map[key].append(value) # 转成普通dict(可选,看需求) result_map = dict(result_map) print(result_map)
方式2:用pandas库(更简便)
如果你已经在用pandas,一行代码就能搞定:
import pandas as pd df = pd.read_csv("your-file-path.csv") result_map = df.groupby('key')['value'].apply(list).to_dict() print(result_map)
关键说明:
defaultdict(list)会自动为不存在的key创建空列表,不用手动判断,代码更简洁。- pandas的
groupby方法可以快速按key分组,然后把每组的value转成列表,非常高效。
内容的提问来源于stack exchange,提问作者RichaDwivedi
相关产品推荐
相关产品推荐

