繁体   English   中英

拼合嵌套字典

Flatten nested Dictionary

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在使用以下内容反序列化一些嵌套的JSON:

string json = @"{
    ""name"": ""charlie"",
    ""someID"": 123,
    ""level1"" : {
        ""name"": ""charlie 1"",
        ""someID"": 456
    }
}";

JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string, object> data = serializer.Deserialize<Dictionary<string, object>>(json);

完成此操作后,每个字典键的值都可以是另一个字典,依此类推,可以有多个层次。

我想做的是将多级数据展平,因此它只是一个平面Array / List,仅包含所有JSON属性名称及其值。 这样我最终得到这样的东西:

name, "charlie"
someID, 123
name, charlie 1
someID, 456

我一直在使用SelectMany()之类的方法 ,但是无法纠缠它来做我想做的事情。

我一直在徘徊这样的事情:

var obj = data.Values.SelectMany<object, Dictionary<string, object>>(x => x);

但是我不能满足编译器的要求。 是的,我迷路了。

我正在使用.NET 3.5。

2 个回复
Func<Dictionary<string, object>, IEnumerable<KeyValuePair<string, object>>> flatten = null;

flatten = dict => dict.SelectMany(kv => 
                        kv.Value is Dictionary<string,object> 
                            ? flatten((Dictionary<string,object>)kv.Value)
                            : new List<KeyValuePair<string,object>>(){ kv}
                       );

var flatList = flatten(data).ToList();

您需要在此处递归:

IEnumerable<Tuple<string, string>> Flatten(this IDictionary dict)
{
    foreach(DictionaryEntry kvp in dict)
    {
        var childDictionary = kvp.Value as IDictionary;
        if(childDictionary != null)
        {
            foreach(var tuple in childDictionary.Flatten())
                yield return tuple;
        }
        else
            yield return Tuple.Create(kvp.Key.ToString(), kvp.Value.ToString());
    }
}

// Usage:

var flatList = data.Flatten().ToList();

在.NET 3.5上,可以使用KeyValuePair<string, string>代替Tuple<string, string>

请注意,没有KeyValuePair.Create ,您需要使用new KeyValuePair<string, string>(kvp.Key.ToString(), kvp.Value.ToString())

1 拼合字典中的嵌套数组

我有一本字典,里面有一个嵌套数组 现在,我需要(想要)使“ foo”数组成为字典的一部分,以便“数据”看起来像: 我在Google上搜索并找到了一些解决方案,这些解决方案与主题密切相关,但不完全是我所需要的: https : //developer.mozilla.org/en- ...

2 展平嵌套字典

输入: 预期输出: 我得到的输出: 我应该如何展平 'arr_2' 的字典? 另外,有没有一种pythonic的方法来做到这一点? 我觉得,我做完了。 ...

2020-06-08 05:48:27 1 33   python
4 展平嵌套字典并将其转换为列

我有一个 JSON,我将其转换为字典并尝试从中制作数据框。 问题是它是多重嵌套的并且数据不一致 例如 我想将其转换为如下所示的数据帧: 或者以更好的方式展示它: 我做了什么: 我试过 : 但是它在一行中给出了所有值,我如何根据套件将它们分开并得到结果? ...

5 如何递归展平嵌套字典?

以为我有一个解决这个问题的简单方法,但事实证明我已经离开了。 我有一个嵌套字典: 我编写了一个递归函数来将其解包到现有字典中: 逐步完成循环,一切顺利,直到我点击递归,然后my_dict从字典转到dictionary-itemiterator object at 0x07f ...

6 拼合带有嵌套键和数组的字典

我需要有关将嵌套字典展平为以下格式的功能的帮助: 我尝试了下面的函数,但是并没有使array元素内的嵌套键变平。 我当前的输出是: 但是实际上我看起来是这样的: ...

7 使用熊猫拼合嵌套字典

我想拼合一个嵌套字典。 在此建议了解决此问题的方法: https : //stackoverflow.com/a/41801708/8443371 。 问题:我只想获得与最后一层中的键相同的键。 输入: 我想要一个输出: 仅使用python的建议应该比基于C实现的Panda ...

8 将嵌套字典展平为列表列表

我有一个代码,结果得到一个这样的嵌套字典: 现在我需要将其“展平”为如下列表: 我已经尝试了很多不同的方法来解决这个问题,但就是无法解决这个问题,有人遇到过类似的问题吗? 编辑:有人要求查看我的一些试验,我尝试通过将其转换为列表来做这样的事情: 这将返回: 这不是我需要的,但我不知 ...

10 将嵌套字典展平为键:值对列表

我正在查询公司内部的API以进行反腐败调查,并且得到的嵌套JSON结果可以在此处看到。 我想将此字典转换为简单的{key:value, key:value}格式,如果我有嵌套的对象或列表,则其中的键合并在扁平化的键字符串中。 问题还在于,API返回的某些项可能不一定具有所有的key:va ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM