Я использую etree для анализа внешнего xml-файла и пытаюсь получить listing data
из дерева из приведенного ниже внешнего xml-файла и добавить в него данные поддерева agancy
. Я могу получить данные для isting
и agancy
просто отлично, но не знаю, как их объединить, чтобы listing
получил правильную agency
информацию.
xml:
<response>
<listing>
<bathrooms>2.1</bathrooms>
<bedrooms>3</bedrooms>
<agency>
<name>Bob's Realty</name>
<phone>555-693-4356</phone>
</agency>
</listing>
<listing>
<bathrooms>3.1</bathrooms>
<bedrooms>5</bedrooms>
<agency>
<name>Larry's Homes</name>
<phone>555-324-6532</phone>
</agency>
</listing>
</response>
питон:
tree = lxml.etree.parse("http://www.someurl.com?random=blahblahblah")
listings = tree.xpath("/response/listing")
agencies = tree.xpath("/response/listing/agency")
listings_info = []
for listing in listings:
this_value = {
"bedrooms":listing.findtext("bedrooms"),
"bathrooms":listing.findtext("bathrooms"),
}
for agency in agencies:
this_value['agency']= agency.findtext("name")
listings_info.append(this_value)
Я попытался добавить это в один момент чуть выше, где встречается listing_info.append(this_value)
, однако это неверно и просто добавляет последнее значение агентства в каждый список.
Я выводю данные в json, и вот как это выглядит (Вы можете видеть, как информация одного агентства вкладывается в оба результата:
{"listings":[{"agency": "Bob's Realty", "phone":"555-693-4356" "bathrooms": "2.1", "bedrooms": "3"},{"agency": "Bob's Realty", "phone":"555-693-4356" "bathrooms": "3.1", "bedrooms": "5"} ]}
Как я могу объединить данные из response/listing/agency
с response/listing
в моем исходном for
утверждении?