1

Если я хочу сгенерировать словарь из списка слов, используя понимание и тройной внутри, я сталкиваюсь с некоторыми проблемами и нуждаюсь в помощи.Python, пытаясь сгенерировать словарь внутри полного списка

Словарь должен быть сгенерирован без импорта дополнительного модуля, используя длину слова в качестве ключа и слово как значение. Вот моя проблема наиболее упрощена:

l=['hdd', 'fdd', 'monitor', 'mouse', 'motherboard'] 

d={} 

for w in l : 
    if len(w) in d : d[ len(w) ].append(w) 
    else   : d[ len(w) ] = [ w ] 

# and dictionary inside list is OK: 
print [d] 
>>>[{11: ['motherboard'], 3: ['hdd', 'fdd'], 5: ['mouse'], 7: ['monitor']}] 

Затем попытался сделать его всеобъемлющим:

d={} 
print [ d[ len(w) ].append(w) if len(w) in d else d.setdefault(len(w), [w]) for w in l ] 
>>>[['hdd', 'fdd'], None, ['monitor'], ['mouse'], ['motherboard']] 

... который не работает. Любая помощь?

+1

Это потому, что ваш список будет состоять из возвращаемых значений ваших выражений. Попробуйте 'print d [3] .append (123)' в приглашении и посмотрите. Фактический словарь 'd' в порядке. – user1603472

+0

Upvote для просмотра. – Alex

ответ

1

Все в порядке, но вы не смотрите на правильную вещь: не печатайте то, что возвращает список.
Он дает вам список результатов d[ len(w) ].append(w) по перечню постижения, но вас интересует всего лишь d.

l=['hdd', 'fdd', 'monitor', 'mouse', 'motherboard'] 

d={} 
[ d[ len(w) ].append(w) if len(w) in d else d.setdefault(len(w), [w]) for w in l ] 
print d 
>>> {11: ['motherboard'], 3: ['hdd', 'fdd'], 5: ['mouse'], 7: ['monitor']} 

Это похоже на то, что вы ожидаете.

+1

Хех! В таких случаях понимание - это просто синтаксис :) – Alex

+0

Да! Короче, но иногда немного сложно ;-) – d6bels

 Смежные вопросы

  • Нет связанных вопросов^_^