Конструкция:
{'Bedrooms' : Listing.text} if Listing.text else 'N/A'
получит значение 'N/A'
, если Listing.text
равно None
или Listing.text
- пустая строка. Эта возможность отключена предыдущим if
.
if 'Bedrooms:' in Listing.text:
bedrooms.append({'Bedrooms' : Listing.text} if Listing.text else 'N/A')
Если мы войдем в блок после if
, тогда Listing.text
не будет пустым.
Возможно, вы имеете в виду следующее:
bedrooms.append({'Bedrooms' : Listing.text} if 'Bedrooms:' in Listing.text else 'N/A')
Это все еще не оптимально, но это минимальная поправка к вашему коду.
ОБНОВЛЕНИЕ # 1
В вашем новом примере все элементы перечислены в одной строке без разделителей. В таком случае ваш шоуд сначала извлекает значения. Например, используя регулярные выражения.
import re
l_text = 'ID: 225671 Type: Apartment Size: 300 m² Bedrooms: 3 Bathrooms: 3 '
pat_id = r'ID:\s*(\d+)'
pat_bedrooms = r'Bedrooms:\s*(\d+)'
pat_apt_size = r'Apartment Size:\s*(\d+)\s*m²'
pat_id2 = r'ID2:\s*(\d+)'
res = re.search(pat_id, l_text)
val_id = res.group(1) if res else 'N/A'
res = re.search(pat_id2, l_text)
val_id2 = res.group(1) if res else 'N/A'
res = re.search(pat_bedrooms, l_text)
val_bedrooms = res.group(1) if res else 'N/A'
res = re.search(pat_apt_size, l_text)
val_apt_size = res.group(1) if res else 'N/A'
print(val_id, val_id2, val_bedrooms, val_apt_size)
Вывод:
225671 N/A 3 300
Или вы можете использовать универсальный шаблон:
pat_any = r'([A-Z][^:]*):\s*(\d+)'
res = re.findall(pat_any, l_text)
res = {k:v for k,v in res}
val_id = res.get('ID', 'N/A')
val_id2 = res.get('ID2', 'N/A')
val_bedrooms = res.get('Bedrooms', 'N/A')
val_apt_size = res.get('Apartment Size', 'N/A')
print(val_id, val_id2, val_bedrooms, val_apt_size)
Вывод:
225671 N/A 3 300
Эта реализация отбрасывает m²
. Если вы включите sh, чтобы включить его, вы можете использовать:
pat_any = r'([A-Z][^:]*):\s*([^A-Z]+)'
res = re.findall(pat_any, l_text)
res = {k:v.strip() for k,v in res}
val_id = res.get('ID', 'N/A')
val_id2 = res.get('ID2', 'N/A')
val_bedrooms = res.get('Bedrooms', 'N/A')
val_apt_size = res.get('Apartment Size', 'N/A')
print(val_id, val_id2, val_bedrooms, val_apt_size)
Вывод:
225671 N/A 3 300 m²
Реализация зависит от деталей, не показанных вами.