2016-08-01 1 views
-1

Ich interessiere mich am meisten für Einfachheit, würde also Lösung in jeder Sprache zu schätzen wissen (auch interessant, wie es mit LINQ aussehen würde). Ich habe versucht, es in Python zu tun, aber gescheitert.Wie bekomme ich Wörterbuchwerte aus einer Liste von Listen (jeder Sprache)?

Aus diesen beiden Listen:

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

Ich mag würde dieses Wörterbuch erhalten:

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

Sie haben eine Sprache zu wählen. –

+0

@roryap ist es so eine Regel dieser Seite, oder nur Ihre Meinung? –

+0

@CarlH: Mit zwei Sprachen könnte diese Frage sehr viele gleichwertige Antworten generieren. Beschränken Sie es bitte nur auf eins. (Python ist meine bevorzugte Wahl;). – zondo

Antwort

1

Eigentlich ist es sehr einfach, in Python:

dictionary = dict(zip(init_li2, init_li1)) 

Sie sehen, die dict Konstruktor kann wie folgt verwendet werden:

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

Nun, zip() wird Tupel generieren, indem entsprechende Elemente aus seinen Argumenten genommen werden. Das heißt:

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

Daher nehmen wir die Schlüssel aus init_li2, und die Werte von init_li1.

Beachten Sie, dass zip() eine Liste in Python 2 zurückgibt. Wenn Sie mit großen Listen arbeiten, ist das nicht speichereffizient. Um die Speichernutzung zu verbessern, verwenden Sie stattdessen itertools.izip.

0

Da Sie LINQ erwähnt, könnten Sie so etwas wie dies in C# konfigurieren:

 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" 
     }; 

Dann können Sie sie in einen Wörterbuch ziehen könnten wie:

 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]); 
     }); 

Oder in 'query-Stil' , vielleicht etwas wie:

Drucken Sie diese Ergebnisse mit den folgenden sollten Sie geben, was du bist nach:

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

Tanks viel, können Sie Abfrage-Stil LINQ Ausdruck hinzufügen? –

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 
Verwandte Themen