将多个字典组合成一个字典[重复]

Posted

技术标签:

【中文标题】将多个字典组合成一个字典[重复]【英文标题】:Combine multiple dictionaries into a single dictionary [duplicate] 【发布时间】:2012-05-20 12:33:00 【问题描述】:

可能重复:Merging dictionaries in C#

字典 1

“a”、“1” "b", "2"

字典 2

“c”、“3” “d”、“4”

字典 3

“e”、“5” "f", "6"

组合字典

“a”、“1” “b”、“2” “c”、“3” “d”、“4” “e”、“5” “f”、“6”

如何将以上 3 个字典组合成一个组合字典?

【问题讨论】:

如果你有不同值的键会发生什么? Sani..我创建了一个类级别的私有变量,然后一次调用另一个私有方法 1 字典将它们添加到组合方法中。它看起来不干净,所以我在这里寻求更好的方法。 您能说明您的字典当前在代码中的表示方式吗? 【参考方案1】:

只需遍历它们:

var result = new Dictionary<string, string>();

foreach (var dict in dictionariesToCombine) 
    foreach (var item in dict) 
        result.Add(item.Key, item.Value);
    

(假设 dictionariesToCombine 是您要组合的字典中的一些 IEnumerable,例如一个数组。)

【讨论】:

感谢 minitech,我如何创建 IEnumerable 的字典? new Dictionary&lt;string, string&gt;[] your, dictionaries, here 请注意Add 会在重复时抛出异常 if (dict.ContainsKey(item.Key)) dict[item.Key] = item.Value; else dict.Add(item.Key, item.Value); @abatishchev 这不会对重复项做同样的事情。【参考方案2】:
var d1 = new Dictionary<string, int>();
var d2 = new Dictionary<string, int>();
var d3 = new Dictionary<string, int>();

var result = d1.Union(d2).Union(d3).ToDictionary (k => k.Key, v => v.Value);

编辑 为确保没有重复的密钥,请使用:

var result = d1.Concat(d2).Concat(d3).GroupBy(d => d.Key)
             .ToDictionary (d => d.Key, d => d.First().Value);

【讨论】:

请注意ToDictionary 会在重复时抛出异常 @dtb 在我的回答中与union 一起使用时不会有任何重复。 Magnus.. 谢谢.. 这就是我要找的。​​span> @Magnus: Union 仅当 KeyValuePair 的键和值都相等时才会删除重复项。如果你有例如var d1 = new Dictionary&lt;string, int&gt;() "a", 5 ; var d2 = new Dictionary&lt;string, int&gt;() "a", 6 ; 然后你会得到重复的键。 @PaulW。你可以这样做:dictionaries.SelectMany(x =&gt; x).ToDictionary(x =&gt; x.Key, x =&gt; x.Value)

以上是关于将多个字典组合成一个字典[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将多个数据文件组合成 np.arrays,存储在字典中

将一个组组合成多个组而不重复

python中如何将两个列表组合成字典,并存放于一个新字典中

包含具有重复值的字典的字典组数组

从字典键中提取值 - 然后组合成一个对象

在字典中查找最小值[重复]