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上
点击添加联系人按钮,向当前组的联系人集合中添加新的联系人信息
求解答
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的主要内容,如果未能解决你的问题,请参考以下文章