繁体   English   中英

有没有办法通过使用 apply 和 lambda 来编写 function “def”

[英]Is there any way to write function “def” by using apply and lambda

我对此很陌生。 我只想写漂亮的代码。 现在我正在从列(URL 列)中提取字符串并定义新列以添加提取的值。 我正在根据字典提取字符串。 这是我的代码:

Df 样本:

在此处输入图像描述

def conv_attribution_brand_keyword(domain, url):
    
    if domain in dict_brand_keywords.keys():
        
        for keyword in dict_brand_keywords[domain]:
            if keyword in url:
                  return(keyword) 

字典:

brand_dict = {'bmw': ['/1er/', '/m/', '/2er/', '/3er/', '/4er/', '/5er/', '/6er/', '/7er/', '/8er/', '/x/', '/z4/', '/bmw-i/'], 'audi': ['/a1/', '/a3/', '/a4/', '/a5/', '/a6/', '/a7/', '/a8/', '/q2/', '/q3/', '/q5/', '/q7/', '/q8/', '/tt/', '/r8/', '/tron/'], 'mercedes-benz': ['/c-class/', '/e-class/', '/s-class/', '/gle/', '/cla/', '/cls/', '/glc/', '/amg-gt/', '/a-class/', '/sl/', '/slc/', '/b-class/', '/eqc/', '/g-class/', '/gla/', '/glb/', '/gls/', '/v-class/', '/x-class/'], 'skoda-auto': ['/fabia/', '/scala/', '/kamiq/', '/octavia-neu/', '/karoq/', '/kodiaq/', '/superb/']}

有什么办法可以减少这些行数。

我只是想减少行并想获得 output ,它根据字典值提取关键字。

你可以让它更短一点:

def conv_attribution_brand_keyword(domain, url):
    for keyword in dict_brand_keywords.get(domain, []):
        if keyword in url:
            return keyword

我认为这没关系:)

您可以(至少在 Python 3.8 中),但您可能不想这样做。

conv_attribution_brand_keyword = (lambda domain, url: rv
                                    if any((rv:=keyword) in url
                                           for keyword in dict_brand_keywords.get(domain, []))
                                    else None)

(多行仅用于显示目的;所有换行符都可以删除。)

(在 Python 3.8 之前,有些黑客会做同样的事情,没有赋值表达式运算符:= ,但它们看起来更糟。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM