You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:08:19