2015-05-26 154 views
0

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

是这样的:

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) 

我有点不知道我现在可以做什么。有人可以帮忙吗?

谢谢。

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

EDIT2:什么我得到现在的问题是

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

EDIT3:

我的结果看起来是这样的字典后(压缩(...))

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

{} 

{} 

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

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

{} 

{} 

{} 

+0

[Python:Filter a dictionary]的可能重复(http://stackoverflow.com/questions/2844516/python-filter-a-dictionary) –

+2

请显示预期的输入和输出。用你描述的方式,对我来说这仍然是模糊的。 – Shashank

+0

@Shashank请检查编辑。预先感谢您 – JChao

回答

1

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

假设这是保证你可以做到

# 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

+0

对不起它似乎并不像它的工作后的字典。有一件事是,当我将这两个列表压缩在一起时,我不知道什么是“关键”。两个列表都有空的条目,所以似乎没有任何问题将它们压缩在一起。但是,由于没有“关键”用于空值,所以我不知道如何调用或删除它们。 – JChao

+0

hmmm ok基于您编辑的问题更新了答案。 –

+0

非常感谢你@Martin Konecny。问题已经解决了! – JChao

-1

使用过滤器,你哈d是错误的,第一个参数必须是可调用接受一个参数,你可以使用内置的布尔函数

category_list = filter(bool, category_list) 
+1

https://docs.python.org/2/library/functions.html#filter – Shashank

+1

哦,谢谢我不知道那个。 –

2

使用字典理解与is not None检查:

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

从文档上dict comprehensions

+0

我试过了,结果仍然一样。我用 “complete_dict2 = {K:v对于K,V在complete_dict.iteritems()如果v不无}” complete_dict是两个列表荏苒一起 – JChao