Python函数使用了3次,但只返回一次

时间:2017-09-23 14:19:50

标签: python function dictionary

我正在尝试创建一个返回字典并使用它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))   

2 个答案:

答案 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; } } f1f2的原始定义,但我怀疑它看起来像:

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