python - 将 map() 函数(来自 Pool 类)返回的列表转换为 Python 中的字典

标签 python list dictionary data-structures

我在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 分数。每个人都认为使用全局字典这是一个非常糟糕的主意,这是正确的。有一种不太冗长的方法可以完成您想要的事情:

  1. 返回一个由(酒店名称、分数)组成的(元组) get_accomodation_wifi_ rating 函数:

    返回(酒店名称,wifi_score)

  2. 使用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/

相关文章:

python - 从 cmd 运行时,.py 文件在文本编辑器中打开

python - 我如何使用pypika连接到数据库?

java - 重新解析 Map 的干净方法

python - 按元组的指定元素对带有元组键的字典进行排序

c++ - 什么容器允许二进制搜索和随机删除元素?

python - 如何获取字符串中的第一个单词

Python findall 字符串

regex - 如何在 Scala 中删除两个特定字符之间的子字符串

python - 从列表中过滤掉重复的属性

arrays - 如何使 Dart 中的数组(列表)元素唯一?