C#中如何将含重复ID的Tuple列表转换为字典?
解决List<Tuple<long, string>>转Dictionary<long, List>的问题
嗨,这个坑我之前踩过!你直接用ToDictionary报错的原因很简单——ToDictionary要求字典的键必须唯一,但你的数据里同一个id对应了多个value,重复的键自然会触发异常。
正确的做法是先对数据按id分组,再把分组结果转换成字典,具体代码如下:
// 你的原始列表 var originalList = new List<Tuple<long, string>> { Tuple.Create(1L, "hello"), Tuple.Create(2L, "what"), Tuple.Create(1L, "why"), Tuple.Create(3L, "how"), Tuple.Create(4L, "when"), Tuple.Create(3L, "who") }; // 转换为目标字典 var resultDict = originalList // 第一步:按id分组,把相同id的元素归为一组 .GroupBy(tuple => tuple.Item1) // 第二步:将分组转换为字典,键是分组的id,值是该组所有value的列表 .ToDictionary( group => group.Key, group => group.Select(tuple => tuple.Item2).ToList() );
额外小提示
如果你的项目用的是C# 7.0及以上版本,推荐使用值元组替代Tuple,代码可读性会提升很多:
// 用值元组定义列表 var originalList = new List<(long Id, string Value)> { (1, "hello"), (2, "what"), (1, "why"), (3, "how"), (4, "when"), (3, "who") }; // 转换代码更直观 var resultDict = originalList .GroupBy(item => item.Id) .ToDictionary( group => group.Key, group => group.Select(item => item.Value).ToList() );
这样处理后,每个id对应的所有value就会被收集到同一个列表里,完美满足你的需求~
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

