代码之家  ›  专栏  ›  技术社区  ›  HelpASisterOut

在python的单行循环中添加多个条件

  •  0
  • HelpASisterOut  · 技术社区  · 6 年前

    我正在使用 beautifulsoup 要浏览网站,请获取所有 p text . 有时候在这里面 ,存在类为的元素 emoji

    for p in soup.find_all('p', {'class': 'text'}):
        emoji = p.select('emoji')
        ems = ""
        if emoji:
            for em in emoji:
                ems += (str(em['alt']))
        result.append([p.getText(), ems])
    

    我把它转换成一个单线循环:

    result = [[x.getText(), y['alt']] for x in soup.find_all("p", {"class": "text"}) for y in x.select('emoji')]
    

    • 它节省了 . 我需要拯救所有的人 表情符号 不存在我想保存一个空字符串 ['lorem ipsun',''] . 我应该在单行循环中的何处添加此条件?

    • 表情符号 如果存在,它会保存相同的 文本 次, 被数个表情符号,每次用不同的 单一的 表情符号。如何保存所有用逗号分隔的表情符号?试着去做 ''.join(','+y['alt']) 而不是 y['alt'] 但没有改变我的结果。

    先谢谢你。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Aniket Navlur    6 年前

    试试这个:

    import functools
    
    result = [ [p.getText(), functools.reduce(lambda x, y: x + y, [ str(em['alt']) for em in p.select('emoji')])] for p in soup.find_all('p', {'class': 'text'})]
    
        2
  •  0
  •   HelpASisterOut    6 年前

    result = [[p.getText(), functools.reduce(lambda x, y: x + y, [str(em['alt']) for em in p.select('emoji')], '') ] for p in soup.find_all('p', {'class': 'text'})]