@ cᴏʟᴅsᴘᴇᴇᴅ Я думал, что когда он опубликовал это, он просто был мета с твоим ответом. Я пытаюсь сделать это в понимании, я видел это решение в другом ответе, но я пытался сделать это в одной строке - оказывается, 1 строка немного сложнее, чем ожидалось

ем очень простой пример зацикливания предложения и создания словаря, который отображает{x:y}, гдеx является ключом, представляющим длину слов иy это список слов в предложении, которые содержатx количество букв

Входные данные:

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

Ожидаемый результат:

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

Вот попытка, которая создает список значений, но каждый раз перезаписывает его:

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

Возможно ли сделать это в одной строке в Python?

Ответы на вопрос(2)

это не будет читабельным. Это простое и понятное решение, даже если оно занимает несколько строк:

from collections import defaultdict

mywords = "May your coffee be strong and your Monday be short"    
ans = defaultdict(list)

for word in mywords.split():
    ans[len(word)].append(word)
 coldspeed19 окт. 2017 г., 01:32
@JoranBeasley Для справки, этот вопрос связан сДругой вопрос, и мойответ именно это.
 Joran Beasley19 окт. 2017 г., 01:31
Я согласен, что это "правильный способ" сделать это ... но это довольно явно нарушает его однострочное условие ....
 AK4719 окт. 2017 г., 01:35
@ cᴏʟᴅsᴘᴇᴇᴅ Я думал, что когда он опубликовал это, он просто был мета с твоим ответом. Я пытаюсь сделать это в понимании, я видел это решение в другом ответе, но я пытался сделать это в одной строке - оказывается, 1 строка немного сложнее, чем ожидалось
Решение Вопроса

Конечно, вы можете, используяsorted + groupby, но это не выглядит великолепно.

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']}

П.С., вот мойответ (с помощьюdefaultdict что я рекомендую за это) коригинальный вопрос.

Ваш ответ на вопрос