因此,我有一个使用BeautifulSoup检索数据的方法;它能够存储和附加从字典收集的数据;但是,当我试图打印列表以检查数据时,它返回
Empty { }
样本代码
main_link = 'Sample Link'
def_list = []
def_dict = {}
def retrieve_from(ml):
#some code
scrap_data = retrieve_from(main_links)
def MethodA(className, url_link):
try:
for div_tag in url_link.find_all('div'):
div_text = div_tag.find('div', {'class': className})
if div_text :
def_dict = {
'Description': div_text.text.replace("\n", "")}
def_list.append(def_dict )
return def_dict
except:
def_dict = None
该方法检索数据没有问题,因为它在列表中打印;当我在命令中打印def_list
时:
{'Description': 'a'},
{'Description': 'b'},
{'Description': 'c'}
我试着引用下面的内容,但没有真正解决我遇到的问题。你知道吗
我试过了
my_dict = list(def_dict.keys())
pprint(my_dict)
但仍然返回{},我是否指向未定义的列表?你知道吗
试试这个
评论中的jasonharper对这个问题的看法是正确的,LearningNoob基本上有一个正确的解决方案(稍加调整),但我认为值得发布它来提供整个情况。你知道吗
def_list
是在外部作用域中定义的列表,用于保存def_dict
词典。def_dict
是在它下面定义的:现在还不清楚这是用来做什么的,但是在MethodA
中,我们可以看到def_dict
似乎是一个带有Description
键的容器,其值基于特定类的<div>
元素中的文本。你知道吗在
MethodA
中,我们使用一系列方法来寻找满足特定标准的<div>
。当我们找到一个时,我们创建一个新的def_dict
:因为我们是在一个内部作用域中分配给变量
def_dict
,这个新对象(用{}
初始化)实际上优先于在外部作用域中定义的def_dict
:内存中有两个字典实例-在外部作用域中,初始的空字典实例仍然分配给def_dict
,而在外部作用域中内部作用域def_dict
现在引用字典{'Description': div_text.text.replace("\n", "")}
。你知道吗因此,第二个实例被附加到
def_list
。因为def_list
没有在内部作用域中分配给它,所以它仍然是我们在外部作用域中初始化的同一个列表实例。你知道吗当我们返回到外部作用域时,我们发现对
def_list
和def_dict
的引用在这些作用域中从未更改,但是def_list
仍然引用我们在MethodA
中创建的所有def_list
实例。因此,def_list
打印在运行MethodA
时初始化的def_dict
列表,def_dict
打印为空(因为从未向其中添加任何内容)。你知道吗就目前的情况而言,据我所知,没有理由确定哪些
def_dict
(在MethodA
可以初始化的def_dicts
的无限数中)应该被外部范围中的def_dict
引用,所以我不确定为什么def_dict
返回空的还是返回def_list
的任意成员相关。你知道吗谈到LearningNoob的解决方案返回
None
的原因,很可能是因为这里的这些行:在
MethodA
的for div_tag in url_link:
迭代过程中,它可能会在某个点失败。发生这种情况时,将调用except
子句,并隐式返回None
。因此,如果您这样做:结果将是
None
。你知道吗尝试返回列表而不是字典?你知道吗
相关问题 更多 >
编程相关推荐