1

内部で内包表記と三項を使用して単語のリストから辞書を生成したい場合、いくつかの問題が発生し、助けが必要です。

単語の長さをキーとして、単語を値として使用して、余分なモジュールをインポートせずに辞書を生成する必要があります。最も単純化された私の問題は次のとおりです。

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

...これは機能しません。何か助けはありますか?

4

1 に答える 1

1

すべて問題ありませんが、正しいものを見ていません。リスト内包表記が返すものを出力しないでください。
リスト内包表記によってyieldのリストが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']}

これはあなたが期待しているようです。

于 2015-02-25T11:37:11.453 に答える