【问题标题】:How to remove empty entries from a list in a dictionary using python如何使用python从字典中的列表中删除空条目
【发布时间】:2013-03-20 12:47:42
【问题描述】:

我有一本这样的字典:

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

【问题讨论】:

    标签: python list dictionary generator


    【解决方案1】:

    带有听写理解和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']}
    

    【讨论】:

    • 你的意思是“如果你在 Python 2 上的列表理解”,对吧?
    • 为什么是filter(bool, v)filter(None, v) 不是一模一样吗?
    • @BernhardKausler no, filter 在 Python 2 中返回一个列表,但在 Python 3 中返回一个迭代器,因此是列表推导式。
    • @wRAR Python 2 没有字典推导,只有列表推导。
    • 啊,他们从 Python 2.7 开始添加了 dict 理解
    【解决方案2】:

    你可以在 itertools 中使用 ifilter

    from itertools import ifilter
    
    for key,val in data.iteritems():
        data[key] = list(ifilter(lambda x: x!='', val))
    

    【讨论】:

    • 使用ifilter() 然后调用list() 完全违背了目的。那你也可以直接使用filter(),这样会更快。 ifilter 也将 bool 作为过滤器。
    猜你喜欢
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 2016-03-14
    相关资源
    最近更新 更多