我对此很陌生。我只想编写漂亮的代码。现在,我正在从一列(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/']}
有什么方法可以减少这些行数。
我只想还原行并希望获得输出,该输出基于字典值提取关键字。
答案 0 :(得分:3)
您可以将其缩短一点:
def conv_attribution_brand_keyword(domain, url):
for keyword in dict_brand_keywords.get(domain, []):
if keyword in url:
return keyword
我认为这还可以:)
答案 1 :(得分:1)
您可以(至少在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)
(多行仅用于显示目的;所有换行符都可以删除。)
(有些hack在Python 3.8之前会做同样的事情,但没有赋值表达式运算符:=
,但看起来更糟。)