Python Dictionary – How to Create a List of Values in a Dictionary Comprehension

dictionarydictionary-comprehensionlistpython

Taking a very simple example of looping over a sentence and creating a dictionary which maps {x:y}, where x is a key representing the length of the words and y is a list of words in the sentence that contain x amount of letters

Input:

mywords = "May your coffee be strong and your Monday be short"

Expected Output:

{2: ['be', 'be'], 3: ['May', 'and'], 4: ['your', 'your'], 5: ['short'], 6: ['coffee', 'strong', 'Monday']}

Here's an attempt that creates a list of values but overwrites it each time:

{len(x):[x] for x in mywords.split()}
{2: ['be'], 3: ['and'], 4: ['your'], 5: ['short'], 6: ['Monday']}

Is it possible to do this in one line in Python?

Best Answer

Sure, you can, using sorted + groupby, but it doesn't look great.

from itertools import groupby
d = dict([(k, list(g)) for k, g in groupby(sorted(mywords.split(), key=len), key=len)])

print(d)
{2: ['be', 'be'],
 3: ['May', 'and'],
 4: ['your', 'your'],
 5: ['short'],
 6: ['coffee', 'strong', 'Monday']}

P.S., Here's my answer (using defaultdict that I recommend over this) to the original question.

Related Question