Вы можете создать словарь, а затем добавить в него соответствующие записи.
result = { 'prc': response.xpath(prc_path).extract_first() }
if sqf_path:
result['sqf'] = response.xpath(sqf_path).extract_first()
if loc_path:
result['loc'] = response.xpath(loc_path).extract_first()
yield result
Вы также можете выделить бит extract_path
с помощью точного понимания.
result = { 'prc': prc_path, 'sqf': sqf_path, 'loc': loc_path }
yield { key : response.xpath(value).extract_first()
for (key, value) in result.items() if value }
В более ранних версиях Python это было бы:
result = { 'prc': prc_path, 'sqf': sqf_path, 'loc': loc_path }
yield dict((key, response.xpath(value).extract_first())
for (key, value) in result.items() if value)