2016-08-01 72 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 
相關問題