我试图了解如何从一个函数返回几个字典。如果我在函数本身中打印出 data_dict ,我会得到五个字典。如果将从函数返回data_dict,将其存储在变量中,然后打印出来,则仅显示最后一个字典。如何将所有五个字典归还? 感谢您的所有建议! 答案 0 :(得分:3) 您的问题是,在 您必须为所有字典创建列表 和 和 在 答案 1 :(得分:1) 编辑:看到@Furas的答案,但几乎是同一回事(在点击“提交”之前没有看到其他答案) 如果您知道要提前返回的字典数,则可以像这样返回它们: 然后使用如下结果: 但是如果您想返回任意数量的结果,则应该返回包含所有字典的列表:import requests
from bs4 import BeautifulSoup
import re
import json
source = requests.get('https://www.tripadvisor.ch/Hotel_Review-g188113-d228146-Reviews-Coronado_Hotel-Zurich.html#REVIEWS').text
soup = BeautifulSoup(source, 'lxml')
pattern = re.compile(r'window.__WEB_CONTEXT__={pageManifest:(\{.*\})};')
script = soup.find("script", text=pattern)
dictData = pattern.search(script.text).group(1)
jsonData = json.loads(dictData)
def get_reviews():
data_dict = {}
for locations in jsonData['urqlCache']['669061039']['data']['locations']:
for data in locations['reviewListPage']['reviews']:
data_dict['reviewid'] = data['id']
data_dict['authoridtripadvisor'] = data['userId']
userProfile = data['userProfile']
data_dict['author'] = userProfile['displayName']
print(data_dict)
#return data_dict
reviews = get_reviews()
print(reviews)
2 个答案:
data_dict
中您只能保留一部词典。 all_dictionaries = []
append()
到此列表的每个字典all_dictionaries.append(data_dict)
return
此列表return all_dictionaries
for
循环中,您必须为新数据创建新字典。您不能使用一个data_dict
来替换此词典中的元素。
def get_reviews():
all_dictionaries = []
for locations in jsonData['urqlCache']['669061039']['data']['locations']:
for data in locations['reviewListPage']['reviews']:
data_dict = {}
data_dict['reviewid'] = data['id']
data_dict['authoridtripadvisor'] = data['userId']
userProfile = data['userProfile']
data_dict['author'] = userProfile['displayName']
print(data_dict)
all_dictionaries.append(data_dict)
return all_dictionaries
def get_reviews():
# ...
return dict1, dict2, dict3
d1, d2, d3 = get_reviews()
import requests
from bs4 import BeautifulSoup
import re
import json
source = requests.get('https://www.tripadvisor.ch/Hotel_Review-g188113-d228146-Reviews-Coronado_Hotel-Zurich.html#REVIEWS').text
soup = BeautifulSoup(source, 'lxml')
pattern = re.compile(r'window.__WEB_CONTEXT__={pageManifest:(\{.*\})};')
script = soup.find("script", text=pattern)
dictData = pattern.search(script.text).group(1)
jsonData = json.loads(dictData)
def get_reviews():
data = []
for locations in jsonData['urqlCache']['669061039']['data']['locations']:
for data in locations['reviewListPage']['reviews']:
data.append({
'reviewid': data['id'],
'authoridtripadvisor': data['userId'],
'author': data['userProfile']['displayName']
})
return data
reviews = get_reviews()
print(reviews)