Dictionary 嵌套Dictionary

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dictionary 嵌套Dictionary相关的知识,希望对你有一定的参考价值。

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

点击添加组,创建一个新的Dictionary泛型集合表示新组的联系人信息,专门存放该组的联系人信息,将新组的名称作为组信息Dictionary泛型集合的键,值就是该组联系人的集合
组添加完成后,遍历组信息Dictionary泛型集合中所有的键,显示在窗体左边的ListBox中
点击ListBox中的组名,组名作为键在组信息集合中获取对应的联系人集合,将联系人集合中的键(联系人姓名)和值(联系电话)现在在ListView上
点击添加联系人按钮,向当前组的联系人集合中添加新的联系人信息
求解答

参考技术A Dictionary<string, Dictionary<string, string>>
groupList = new Dictionary<string,Dictionary<string, string>>();
groupList.Add("群组1",new Dictionary<string,string>());
groupList.Add("群组2",new Dictionary<string,string>());
...
groupList["群组1"].Add(“联系人11","电话11");
groupList["群组1"].Add(“联系人12","电话12");
groupList["群组1"].Add(“联系人13","电话13");
..
groupList["群组2"].Add(“联系人21","电话21");
groupList["群组2"].Add(“联系人22","电话22");
groupList["群组2"].Add(“联系人23","电话23");
...

ListBox.DataSource = groupList.Keys;
ListBox.DataBind();

ListBox.OnSelectedIndexChange = new EventHandler(ListBoxSelectedChange);
protected void ListBoxSelectedChange(object sender,EventArg e)

ListView.DataSource = groupList[ListBox.SelectedItem.Value];
ListView.DataBind();

protected void Add联系人(object sender,EventArgs e)

groupList[ListBox.SelectedItem.Value].Add(姓名Control.Text,联系电话Control.Text);
ListBoxSelectedChange(sender,e);
本回答被提问者采纳

如何将嵌套字典转换为 3D 数组

【中文标题】如何将嵌套字典转换为 3D 数组【英文标题】:How to Convert a Nested Dictionary to a 3D array 【发布时间】:2018-04-19 13:39:04 【问题描述】:

我正在尝试将嵌套字典转换为 Python3 中的 3D 数组。我有一个来自另一篇文章的函数,它完成了将 Nest Dict 转换为列表,如下所示

def Convert_Nest_Dictionary_2_List(Dictionary):
    local_list = []
    for key, value in Dictionary.items():
        local_list.append(key)
        local_list.extend(Convert_Nest_Dictionary_2_List(value))
    return local_list

当我使用这个功能时,我得到了错误:

`'numpy.ndarray' object has no attribute 'items'`

我假设这是因为我的嵌套字典中的对应值是具有形状 (96,144) 的多维数组,而不是单个值。

我的嵌套字典很大,所以我只在下面显示它的一部分。输入 dict RCP45 返回:

'Sim1': '01': '2005': array([[ 244.94081116, 244.95672607,...

有 3 个 Sims,每个 sim 中有 12 个键(用于月份),每个月有 61 个键(2005-2065 表示年份),每个对应的值将全球空间温度数据表示为 (96,144) 数组(纬度和经度)。

我希望得到的数组是 (2196,94,144) 的形状,其中 2196 代表 3*12*61 (sims* Months *years)

我将如何修改函数来实现这一点?或者也许一起使用不同的方法来实现这一点?

非常感谢!

【问题讨论】:

【参考方案1】:

您需要进行基本情况检查(当递归到达您的 numpy 数组时)。大致如下:

def Convert_Nest_Dictionary_2_List(Dictionary):
    local_list = []
    if isinstance(Dictionary, numpy.ndarray):
        return np_array_to_whatever_youre_trying_to_get(Dictionary)
    for key, value in Dictionary.items():
        local_list.append(key)
        local_list.extend(Convert_Nest_Dictionary_2_List(value))
    return local_list

虽然更改变量名可能是合适的。

【讨论】:

抱歉,当我复制该位时,我使用了.items() 函数,只需输入字典名称RCP45 即可返回'Sim1': '01': '2005': array([[ 244.94081116, 244.95672607,...。我是使用嵌套字典的新手,但如果我没记错的话,这是一个嵌套字典? 是的,就是这样。尽管我仍然对您如何在数据结构的叶子(形状为 (96, 144) 的 numpy.ndarray)处获得二维数组感到困惑。我原以为这会使您的数据成为 4D 而非 3D。

以上是关于Dictionary 嵌套Dictionary的主要内容,如果未能解决你的问题,请参考以下文章

嵌套字典LINQ中的过滤元素

深度嵌套字典是反模式吗?

如何将嵌套字典转换为 3D 数组

将大型嵌套字典转储到 JSON 对象中[重复]

Python学习:字典(dictionary)

Python 基础 - Day 2 Learning Note - Dictionary 字典