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