我正在尝试创建一个返回字典并使用它3次的函数,然后将返回的字典加入1.然后将该字典作为值分配给另一个字典中的键。但是print(all_dict)只返回1个字典。如果我尝试打印(get_dict(f1)),我会在下面找到Traceback。如果不是同时调用相同的函数3次,我在每个函数中使用相同的命令分别定义每个函数,我可以得到我想要的。但我希望找到一种更简洁的方法来编写代码。
您可以在此处找到表格的HTML:https://github.com/Tokaalmighty/topmover_table_html/blob/master/html
Traceback (most recent call last):
File "week4_1.py", line 55, in <module>
print(get_dict(f1))
File "week4_1.py", line 23, in get_dict
bold=topmovers.find_all('b')
AttributeError: 'NoneType' object has no attribute 'find_all'
以下是我的函数代码以及我如何尝试将3个词典加入1:
def get_dict(f1):
soup=bs(f1,'html.parser')
topmovers=soup.find('table'{'class':'topmovers'})
bold=topmovers.find_all('b')
…
…
return final
all_dict={}
result = {**get_dict(f1), **get_dict(f2), **get_dict(f3)}
all_dict['result']=result
print(all_dict)
print(get_dict(f1))
答案 0 :(得分:1)
您没有显示class PathPattern{
constructor(pattern){
this.keys = [];
var optionalParam = /\((.*?)\)/g;
var namedParam = /(\(\?)?:\w+/g;
var splatParam = /\*\w+/g;
var escapeRegExp = /[\-{}\[\]+?.,\\\^$|#\s]/g;
var route = pattern.replace(escapeRegExp, '\\$&')
.replace(optionalParam, '(?:$1)?')
.replace(namedParam, (match, optional) => {
if(!optional)
this.keys.push(match.replace(/:/,''))
return optional ? match : '([^/?]+)';
})
.replace(splatParam, '([^?]*?)');
this.rgx = new RegExp('^' + route + '(?:\\?([\\s\\S]*))?$');
}
match(path){
var params = {};
var values = this.rgx.exec(path);
if(!values) return null;
values = values.slice(1);
values = values.map((param, i)=>{
if (i === values.length - 1) return param || null;
return param ? decodeURIComponent(param) : null;
});
this.keys.forEach((key, i)=> params[key] = values[i]);
return params;
}
}
,f1
和f2
的原始定义,但我怀疑它看起来像:
f3
然而,接下来发生的事情是,文件的重复读取从最后一个停止的地方开始。如果您已经读取了整个文件(例如通过获取bs来解析它),那么这将是最后的,后续读取将返回空白。 bs现在无法在空文件中找到相应类的表,因此返回f1 = open(...)
。
要解决此问题,您可以通过调用
将文件内部指针重置回到开头None
第二次使用之前;或者您可以通过捕获变量中第一个f1.seek(0)
调用的结果来避免重复工作。
答案 1 :(得分:0)
你能不能这样做吗?
f1是dic 1
f2是dic 2
f3是dic 3
然后将dic f1和f2合并为A1
然后将A1和f3合并为A1 Again
def MergeDic(f1, f2, f3):
A1 = f1.copy()
A1.update(f2)
A1.update(f3)
return A1