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

用听写理解和filter()

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

或者,对于 python 2.6 和更早版本,您还没有 dict 理解:

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 回答