2016-08-01 73 views
-1

我最感兴趣的是简单性,所以很欣赏任何语言的解决方案(使用LINQ看起来也很有趣)。我试图用Python做,但失败了。如何从列表(任何语言)获取字典值?

从这两个列表:

init_li1 = [[234,45,1,86,2,0],[324,6,1],[123,1111,3]] 
init_li2 = ["Alpha", "Beta", "Gamma"] 

我想获得这本字典:

{"Alpha":[234,45,1,86,2,0], "Beta":[324,6,1], "Gamma":[123,1111,3]} 
+0

你必须选择一种语言。 –

+0

@ roryap这是这个网站的规则,或只是你的意见? –

+0

@CarlH:使用两种语言,这个问题可能会产生很多同样有效的答案。请仅限于一个。 (Python是我的首选;)。 – zondo

回答

1

其实,这是很容易在Python:

dictionary = dict(zip(init_li2, init_li1)) 

你看, dict构造函数可以像这样使用:

dict(('key1', 'value1'), ('key2', 'value2')) 

那么,zip()将通过从其参数中获取相应的元素来生成元组。那就是:

zip([4, 5, 6], [2, 3, 4]) 
#-> (4, 2), (5, 3), (6, 4) 

因此,我们从init_li2钥匙,和值从init_li1

请注意,zip()在Python 2中返回一个列表。如果您正在处理大型列表,这不是内存高效的。要改善内存使用情况,请改为使用itertools.izip

0

既然你提到LINQ,你可以做设置这样的事情在C#:

 var list_1 = new List<List<int>> 
     { 
      new List<int> { 234, 45, 1, 86, 2, 0 }, 
      new List<int> { 324, 6, 1 }, 
      new List<int> { 123, 1111, 3 } 
     }; 

     var list_2 = new List<string> 
     { 
      "Alpha", 
      "Beta", 
      "Gamma" 
     }; 

然后,你可以拉他们到像一本字典:

 var dictionary = new Dictionary<string, List<int>>(); 

     list_2.ForEach(x => 
     { 
      int index = list_2.IndexOf(x); 
      dictionary.Add(list_2[index], list_1[index]); 
     }); 

或者,在 '查询风格' ,可能是这样的:

 var results = from key in list_2 
         let index = list_2.IndexOf(key) 
         let values = string.Join(" ", list_1[index]) 
         select new { Key = key, Values = values }; 

打印出下面这些结果应该会给你什么后:

 foreach (var item in results) 
     { 
      Console.WriteLine($"{item.Key} : {item.Values}"); 
     } 
+0

坦克很多,你可以添加查询式的LINQ表达式吗? –

0
init_li1 = [[234,45,1,86,2,0],[324,6,1],[123,1111,3]] 
init_li2 = ["Alpha", "Beta", "Gamma"] 

new_dict = {} 
for i in range(0, len(init_li1)): 
    new_dict[init_li2[i]] = init_li1[i] 

print new_dict 
相关问题