我在Python中有一个函数,由map()函数调用,该函数迭代作为参数发送的列表中的所有元素。该函数返回一个字典,map函数被分配给一个字典,但Python解释器将其转换为一个列表。
hotels_with_low_wifi_quality = pool.map(get_accomodation_wifi_rating, hotels_url_list)
所以在上面的句子中,hotels_with_low_wifi_quality 是一个字典,而 get_accomodation_wifi_ rating 是一个返回字典的函数。
但是如果我打印hotels_with_low_wifi_quality,它会输出以下内容:
[无、无、无、无、无、无、无、无、无、{u'\nPins Platja\n': u'4,3'}、无、无、无、无、无] 无
这显然是一个列表。如何将其转换为字典,其中 None 值被忽略,唯一元素是 ["Pins Platja"] = 4.3
以下是 get_accomodation_wifi_ rating
def get_accomodation_wifi_rating(hotel):
page = requests.get(hotel)
soup = BeautifulSoup(page.text, 'lxml')
hotel_name = soup.find(id = "hp_hotel_name").text
reviews = soup.find(class_="review_list_score_breakdown_right")
if reviews is not None:
wifi_tag = reviews.find(attrs={"data-question" : "hotel_wifi"})
if wifi_tag is not None:
wifi_rating = wifi_tag.find(class_="review_score_value")
wifi_score = wifi_rating.text
wifi_score_num = wifi_score.replace(",", ".")
if float(wifi_score_num) < 7:
hotels_with_low_wifi_quality[hotel_name] = wifi_score
return hotels_with_low_wifi_quality
最佳答案
看起来您似乎希望能够同时获得所有较差的 wifi 分数。每个人都认为使用全局字典这是一个非常糟糕的主意,这是正确的。有一种不太冗长的方法可以完成您想要的事情:
返回一个由(酒店名称、分数)组成的(元组) get_accomodation_wifi_ rating 函数:
返回(酒店名称,wifi_score)
使用Python内置的
filter
来过滤掉你的NoneTypes:hotels_with_low_wifi_quality = dict(filter(None, returned_list))
上面没有提供函数的过滤器根据python对该项目真实性的评估来评估列表中的每个项目;只是要记住一些事情。
关于python - 将 map() 函数(来自 Pool 类)返回的列表转换为 Python 中的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48046624/