title: Is there a more compact/better way to ZIP multiple lists using LINQ in C#?
body: <p>I am performing a specific operation that I believe is a multi-zip operation. I start with a with a JObject/JToken:</p>
  
  <pre><code>{
    "value1": "one,two,three",
    "value2": "four,five,six",
    "value3": "seven,eight,nine"
  }
  </code></pre>
  
  <p>And I have specific keys/values that I want to extract &amp; split strings and then combine. For example the list of keys I might be given is:</p>
  
  <pre><code>List&lt;string&gt; keys = new List&lt;string&gt; { "value1", "value2" };
  </code></pre>
  
  <p>At the end I want to return a JToken/JArray that looks like this:</p>
  
  <pre><code>[
    {
      "value1": "one",
      "value2": "four"
    },
    {
      "value1": "two",
      "value2": "five"
    },
    {
      "value1": "three",
      "value2": "six"
    }
  ]
  </code></pre>
  
  <p>Note that only the specified keys' values are split and combined. I have coded a way to do this below, but I believe it is very bulky and could be made more compact. Any suggestions to make it more compact without losing efficiency (or even improving) will be appreciated.</p>
  
  <pre><code>        JToken token = JToken.Parse(response);
          Console.WriteLine(token);
  
          List&lt;string&gt; keys = new List&lt;string&gt; { "value1", "value2" };
  
          List&lt;List&lt;string&gt;&gt; values = keys.Select(key =&gt; token[key].Value&lt;string&gt;().Split(',').ToList()).ToList();
          List&lt;Dictionary&lt;string, string&gt;&gt; final = new List&lt;Dictionary&lt;string, string&gt;&gt;();
          for(int i = 0; i &lt; values[0].Count; i++) {
              Dictionary&lt;string, string&gt; splitValues = new Dictionary&lt;string, string&gt;();
              for (int t = 0; t &lt; keys.Count; t++) {
                  splitValues[keys[t]] = values[t][i];
              }
              final.Add(splitValues);
          }
  
          JToken parsedResponse = JToken.FromObject(final);
          Console.WriteLine(parsedResponse);
  </code></pre>