在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 != []]

当然对两个列表都进行操作。

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

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

info 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', ...}
{}
{}
{}

使用包含is not None检查的字典推导式:

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

来自字典推导式文档

而更像是列表中的空列表。

假设这是有保证的,你可以做

# 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与空列表

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

category_list = filter(bool, category_list)

相关内容

  • 没有找到相关文章

最新更新