删除Python中的空字典元素

删除Python中的空字典元素,python,list,dictionary,empty-list,Python,List,Dictionary,Empty List,我的程序会抓取一些网站并创建两个列表,一个用于分类,另一个用于内容。然后我使用dict(zip(……)命令来匹配它们,并将它们放入dict中 大概是这样的: complete_dict=dict(zip(category_list,info_list)) 我遇到的问题是,我的程序正在读取两个列表(类别、信息)中的空元素。只要我以后能把它们去掉就好了。问题是,我没有找到这样做的方法。读取时,两个列表都包含空元素,而不是空字符串,更像是列表中的空列表。在压缩它们之后,我尝试在列表和字典中删除它们,

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

大概是这样的:

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

category_list=filter(None, category_list)

当然,对这两个列表都进行了操作

没有人获胜。然后我试着在字典里用

dict((k, v) for k, v in complete_list.iteritems() if v)
我有点不知道我还能做些什么。有人能帮忙吗

多谢各位

编辑:我尝试过过滤,要么我的条件设置不正确,要么根本解决不了问题。我在寻找另一种方式,所以它不是另一个线程的重复。(该线程有一些有用的信息)

我现在得到的是

[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_列表),我正在尝试移除所有卡在中间的[],所以结果应该是这样的

[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(…)之后是这样的


等等

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

category_list = filter(bool, category_list)

将听写理解与
一起使用不是无
检查:

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))
在某些情况下,您的
信息列表似乎是空的,只需执行以下操作即可

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

为确保您不会将
类别列表压缩为空列表。

可能重复的,请显示预期的输入和输出。你描述的方式对我来说仍然很模糊。@Shashank请检查编辑。提前感谢您这看起来不像是单个空键或值的问题。看起来你在一遍又一遍地运行这个理解,有时,它会生成一个完全空的dict。这可能是周围代码的问题。嗨@user2357112,你认为有没有一种方法可以通过简单地删除那些空的来绕过它?抱歉,它似乎不起作用。一件事是,当我把这两个列表压缩在一起时,我不知道用什么作为“键”。两个列表都有空条目,所以将它们压缩在一起似乎没有任何问题。但是,由于没有“键”用于空值,我不知道如何调用或删除这些值。hmmm确定根据您编辑的问题更新了答案。我尝试了这个,结果仍然相同。我使用了'complete_dict2={k:v代表k,v在complete_dict.iteritems()中如果v不是None}'complete_dict是将两个列表压缩到一起后的dict
complete_dict=dict(zip(category_list,info_list))
if info_list:
    complete_dict=dict(zip(category_list,info_list))