1

次のような辞書があります。

data = {'Fruits' : ['Mango', 'Banana', '', '', 'Apple'],
        'Trees' : ['Pine', 'Bamboo', '', '', '', '', ''],
        'Laptops' : ['Sony', '', '', 'LG', 'Acer', '']}

辞書のすべてのリストからすべての EMPTY 項目を削除するにはどうすればよいですか?次のようになります。

data = {'Fruits' : ['Mango', 'Banana', 'Apple'],
        'Trees' : ['Pine', 'Bamboo'],
        'Laptops' : ['Sony', 'LG', 'Acer']}
4

2 に答える 2

3

dict 内包表記とfilter():

data = {k: filter(bool, v) for k, v in data.iteritems()}

または、Python 2.6 以前の場合、まだ辞書内包表記がない場合:

data = dict((k, filter(bool, v)) for k, v in data.iteritems())

または、Python 3 を使用している場合は、値のリスト内包表記:

data = {k: [i for i in v if i] for k, v in data.iteritems()}

クイックデモ:

>>> data = {'Fruits' : ['Mango', 'Banana', '', '', 'Apple'],
...         'Trees' : ['Pine', 'Bamboo', '', '', '', '', ''],
...         'Laptops' : ['Sony', '', '', 'LG', 'Acer', '']}
>>> {k: filter(bool, v) for k, v in data.iteritems()}
{'Laptops': ['Sony', 'LG', 'Acer'], 'Trees': ['Pine', 'Bamboo'], 'Fruits': ['Mango', 'Banana', 'Apple']}
于 2013-03-20T12:48:19.383 に答える
0

itertoolsでifilterを使用できます

from itertools import ifilter

for key,val in data.iteritems():
    data[key] = list(ifilter(lambda x: x!='', val))
于 2013-03-20T13:11:09.900 に答える