删除Python

时间:2015-05-26 18:08:32

标签: python list dictionary empty-list

我的程序会刮掉一些网站并创建两个列表,一个用于分类,另一个用于内容。然后我使用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)

我有点想到我现在还能做些什么。有人可以帮忙吗?

谢谢。

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

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:

我的结果在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', ...}

{}

{}

{}

等等

3 个答案:

答案 0 :(得分:2)

使用带有 public void getImagesFolder(){ String fileLoc = this.getClass().getResource(IMAGE_FILE).getPath(); int indexIs =fileLoc.indexOf("images/"); String partialPathOfFileLoc = fileLoc.substring(0, indexIs); // try // { // //bufferedReader = new BufferedReader(new FileReader(partialPathOfFileLoc + IMAGE_FILE_WOSLASH)); // bufferedReader = new BufferedReader(new FileReader(fileLoc)); // while((line = bufferedReader.readLine()) != null){ // String imageName = line; // System.out.println("Image name is: "+ imageName); // } // } // catch (FileNotFoundException e1) // { // e1.printStackTrace(); // } // catch (IOException e) // { // // e.printStackTrace(); // } File f = new File(fileLoc); File[] paths; paths = f.listFiles(); int filesLength =paths.length; System.out.println("Files length is: "+ filesLength); for(File path:paths) { // prints file and directory paths System.out.println(path); } 支票的字典理解:

window._pq = window._pq || [];  
_pq.push(['track', 'User Signup']);

来自dict comprehensions

上的文档

答案 1 :(得分: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

答案 2 :(得分:-1)

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

category_list = filter(bool, category_list)