我的程序会刮掉一些网站并创建两个列表,一个用于分类,另一个用于内容。然后我使用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', ...}
{}
{}
{}
等等
答案 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']);
上的文档
答案 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)