How to add multiple values to a key in a Python dictionary
<p>I am trying to create a dictionary from the values in the <code>name_num</code> dictionary where the length of the list is the new key and the <code>name_num</code> dictionary key and value are the value. So:</p>

<pre><code>name_num = {"Bill": [1,2,3,4], "Bob":[3,4,2], "Mary": [5, 1], "Jim":[6,17,4], "Kim": [21,54,35]}
</code></pre>

<p>I want to create the following dictionary:</p>

<pre><code>new_dict = {4:{"Bill": [1,2,3,4]}, 3:{"Bob":[3,4,2], "Jim":[6,17,4], "Kim": [21,54,35]}, 2:{"Mary": [5, 1]}}
</code></pre>

<p>I've tried many variations, but this code gets me the closest:</p>

<pre><code>for mykey in name_num:
    new_dict[len(name_num[mykey])] = {mykey: name_num[mykey]}
</code></pre>

<p>Output:</p>

<pre><code>new_dict = {4:{"Bill": [1,2,3,4]}, 3:{"Jim":[6,17,4]}, 2:{"Mary": [5, 1]}}
</code></pre>

<p>I know I need to loop through the code somehow so I can add the other values to key 3.</p>

<p>This is a good use case for <a href="https://docs.python.org/3/library/collections.html"><code>defaultdict</code></a>:</p>

<pre><code>from collections import defaultdict
name_num = {
    'Bill': [1, 2, 3, 4],
    'Bob': [3, 4, 2],
    'Mary': [5, 1],
    'Jim': [6, 17, 4],
    'Kim': [21, 54, 35],
}

new_dict = defaultdict(dict)
for name, nums in name_num.items():
    new_dict[len(nums)][name] = nums

print(dict(new_dict))
</code></pre>

<p><strong>Output</strong>:</p>

<pre><code>{
    2: {'Mary': [5, 1]},
    3: {'Bob': [3, 4, 2], 'Jim': [6, 17, 4], 'Kim': [21, 54, 35]},
    4: {'Bill': [1, 2, 3, 4]}
}
</code></pre>

python dictionary