删除 Python 中的空字典元素

Removing empty dictionary elements in Python

我的程序会抓取一些网站并创建两个列表,一个用于类别,另一个用于内容。然后我使用 dict(zip(......)) 命令来匹配它们并将它们放入字典中。

像这样:

complete_dict=dict(zip(category_list,info_list))

我 运行 遇到了我的程序正在读取两个列表(类别、信息)中的空元素的问题。只要我以后可以删除它们就可以了。问题是,我没有找到这样做的方法。读出时,两个列表都包含空元素,不是空字符串,更像是列表中的空列表。我尝试在压缩它们之后在列表和字典中删除它们,使用如下命令:

category_list=filter(None, category_list)

或:

info_list=[x for x in info_list if x != []]

当然是两个列表都操作了。

None 占上风。然后我尝试在字典中使用:

dict((k, v) for k, v in complete_list.iteritems() if v)

此时我还能尝试什么?

编辑

我试过过滤,要么我的条件设置不正确,要么根本没有解决问题。我正在寻找其他方式,因此它不是另一个线程的副本(尽管该线程有一些有用的信息)。

编辑 2

我现在得到的是:

[u'info1', u'info2', u'info3', u'info4', ...]

[]

[]

[]

[]

[u'info1', u'info2', u'info3', u'info4', ...]

[]

[]

[]

[u'info1', u'info2', u'info3', u'info4', ...]

信息 1、2、3 和 4(实际上还有更多元素)是从网站上抓取的内容,抱歉我不能真正透露这些是什么,但这个想法表明了。这是列表之一 (info_list),我正在尝试删除卡在中间的所有 [],所以结果应该是

[u'info1', u'info2', u'info3', u'info4', ...]

[u'info1', u'info2', u'info3', u'info4', ...]

[u'info1', u'info2', u'info3', u'info4', ...]

等等

编辑 3

我的结果在 dict(zip(...))

之后看起来像这样
{u'category1': u'info1', u'category2': u'info2', ...}

{}

{}

{u'category1': u'info1', u'category2': u'info2', ...}

{u'category1': u'info1', u'category2': u'info2', ...}

{}

{}

{}

等等。

使用过滤器,你错了,第一个参数必须是可调用的接受一个参数,你可以使用内置的 bool 函数

category_list = filter(bool, category_list)

使用带有 is not None 检查的字典理解:

info_list = {k: v for (k, v) in complete_list.iteritems() if v is not None}

来自 dict comprehensions

上的文档

but more like an empty list within a list.

假设这是保证你可以做到

# make sure value is not "[]" or "[[]]"
{k: v for k, v in complete_list.iteritems() if v and v[0]}

示例:

complete_list = {'x': [[]], 'y': [], 'z': [[1]]}
{k: v for k, v in complete_list.iteritems() if v and v[0]}
# returns {'z': [[1]]}

编辑

根据你更新的问题,我看到你在从这样的网站上抓取后将列表压缩在一起:

complete_dict=dict(zip(category_list,info_list))

在某些情况下,您的 info_list 似乎是空的,只需

if info_list:
    complete_dict=dict(zip(category_list,info_list))

确保您不会使用空列表压缩 category_list