如何初始化包含字典列表的字典?

我开始在C#中做一点开发,我在这里遇到了问题。 通常我在Python中开发这样的东西很容易实现(至少对我来说),但我不知道如何在C#中做到这一点:

我想使用Generic Collections创建一个包含字典列表的字典,如下所示:

{ "alfred", [ {"age", 20.0}, {"height_cm", 180.1} ], "barbara", [ {"age", 18.5}, {"height_cm", 167.3} ], "chris", [ {"age", 39.0}, {"height_cm", 179.0} ] } 

我从以下开始:

 using System.Collections.Generic; Dictionary<String, Dictionary[]> persons; 

但是我想立刻将上面的三条记录插入到人群中。 我一直都遇到语法错误。

任何人都有我的解决方案?

编辑:

谢谢大家 – 我没想到会在如此短的时间内收到如此多的深思熟虑的答案! 你很棒!

你可以使用字典初始化 。 不像Python那么优雅,但可以忍受:

 var persons = new Dictionary> { { "alfred", new Dictionary { { "age", 20.0 }, { "height_cm", 180.1 } } }, { "barbara", new Dictionary { { "age", 18.5 }, { "height_cm", 167.3 } } }, { "chris", new Dictionary { { "age", 39.0 }, { "height_cm", 179.0 } } } }; 

然后:

 persons["alfred"]["age"]; 

另请注意,此结构需要Dictionary>而不需要Dictionary[]>

使用这种结构也可能是一点点PITA和危害可读性以及代码的编译时类型安全性。

在.NET中,最好使用强类型对象,如下所示:

 public class Person { public double Age { get; set; } public string Name { get; set; } public double HeightCm { get; set; } } 

然后:

 var persons = new[] { new Person { Name = "alfred", Age = 20.0, HeightCm = 180.1 }, new Person { Name = "barbara", Age = 18.5, HeightCm = 180.1 }, new Person { Name = "chris", Age = 39.0, HeightCm = 179.0 }, }; 

然后你可以使用LINQ来获取你需要的任何信息:

 double barbarasAge = (from p in persons where p.Name == "barbara" select p.Age).First(); 

需要注意的是,使用集合不会像哈希表查找那样快,但根据您在性能方面的需求,您也可以使用它。

恕我直言在c#中更优雅的方式, 为了避免使用字典 ,c#有比这更好的选择,

是创建像Person这样的 (或结构)

 public class Person { public Person() { } public string Name {get;set;} public int Age {get;set;} public double Height {get;set;} } 

并将这些对象放在实现IEnumerable的通用列表或集合中

 public List; 

并使用Linq来获得你想要的人

 var personToLookfor = from p in people where p.Name == "somename" select p; 

你可以轻松地做到这一点:

  Dictionary> dict = new Dictionary>() { {"alfred",new Dictionary() {{"age",20.0},{"height":180.1}}}, {"barbara",new Dictionary() {{"age",18.5},{"height": 167.3}}} }; 

您最好使用键入的人,或者使用ExpandoObject为字典提供类型语法访问。

 Dictionary dict = new Dictionary() { {"alfred",new Person { age=20.0 ,height=180.1 }}, {"barbara",new Person { age=18.5,height=167.3 }} };