将字典的键与 List 的值进行比较,并返回所有匹配的值,包括重复值

Posted

技术标签:

【中文标题】将字典的键与 List 的值进行比较,并返回所有匹配的值,包括重复值【英文标题】:Compare keys of dictionary with values of List and return all the matching values including duplicates 【发布时间】:2020-12-23 03:56:17 【问题描述】:

我有一个 Dictionary 和另一个 List。我想要实现的是一个 linq 查询,用于将字典与列表进行比较,并获取字典中存在的所有值(将列表与字典中的键进行比较)与列表匹配,包括列表中的重复值。例如,我正在使用

        Dictionary<string, string> key = new Dictionary<string, string>();

        key.Add("RC", "rick castolle");
        key.Add("MS", "Robet sam");
        key.Add("VC", "John David");
        key.Add("KS", "Kelly Thomson");

        List<string> a = new List<string>();
        a.Add("JC"); a.Add("KS"); a.Add("RC"); a.Add("KS");

        var output = key.Where(s => a.Contains(s.Key)).Select(s => new object[] s.Value ).ToList();

它返回输出为 里克·卡斯托尔 凯利汤姆森

但我的预期输出是 里克·卡斯托尔 凯利汤姆森 凯利汤姆森

因为它们是列表中 Ks 的三个重复项。 我如何实现我的输出以获取列表中存在的重复值。

【问题讨论】:

【参考方案1】:

您可以尝试从另一端(列表)进行查询。

a.Where(i => key.ContainsKey(i)).Select(i => key[i])

但如果您可以使用 foreach 会更有效,您将只为每个项目检查一次字典:

var result = new List<string>();
foreach (var i in a)

    if (key.TryGetValue(i, out var val)
        result.Add(val);
 

【讨论】:

以上是关于将字典的键与 List 的值进行比较,并返回所有匹配的值,包括重复值的主要内容,如果未能解决你的问题,请参考以下文章

PHP:如何比较一个数组中的键与另一个数组中的值,并返回匹配?

python 取出 字典的 键或者值

在字典中找到列表的最小值[关闭]

python 中关于字典的键

字典操作

python 一个由字典构成的列表,修改其中1个字典的键的值,却把该列表所有字典相同的键的值都一起修改了?