JSON, который я пытаюсь разобрать, имеет сложную структуру. В полном списке есть 311 словарей, из которых мне удалось получить некоторые ключевые значения. Однако в каждом из этих 311 словарей есть ключ 'cadCargosFuncoes'
, значением которого является словарь с одним ключом, а само значение является списком словарей.
Мне нужно, чтобы для каждого из этих 311 словарей json было взято значение ключа 'funDes'
в каждом из его n
словарей, где n
не всегда одинаково и не гарантируетсяотличаться от нуля.
Я пытался ввести цикл:
for i in ['cadCargosFuncoes']['pt_ar_wsgode_objectos_DadosCargosFuncoes']`
несколькими способами, но так и не смог добиться того, что мне нужно.
import requests
import json
import csv
from csv import DictWriter
r = requests.get('http://app.parlamento.pt/webutils/docs/doc.txt?path=6148523063446f764c324679626d56304c3239775a57356b595852684c3052685a47397a51574a6c636e5276637939535a576470633352764a544977516d6c765a334c446f575a705932387657456c4a535355794d45786c5a326c7a6247463064584a684c314a6c5a326c7a644739436157396e636d466d61574e7657456c4a53563971633239754c6e523464413d3d&fich=RegistoBiograficoXIII_json.txt&Inline=true')
r.raise_for_status()
data = r.json()
mps = data['RegistoBiografico']['RegistoBiograficoList']['pt_ar_wsgode_objectos_DadosRegistoBiograficoWeb']
for j in mps:
if 'cadProfissao' in j:
pass
else:
j['cadProfissao'] = '-88'
for j in mps:
if 'cadDtNascimento' in j:
pass
else:
j['cadDtNascimento'] = '-88'
result = [{"ID": j["cadId"], "Nome": j["cadNomeCompleto"], "Sexo": j["cadSexo"], "D-Nasc": j["cadDtNascimento"], "Profissao": j["cadProfissao"]} for j in mps]
with open('bio_xiii.csv', 'w') as outfile:
writer = DictWriter(outfile, ('ID', 'Nome', 'Sexo', 'D-Nasc', 'Profissao'))
writer.writerows(result)
В настоящее время мой CSV-файл содержит 311 строк, с 'cadId'
, 'cadNomeCompleto'
, 'cadSexo'
, 'cadDtNascimento'
и 'cadProfissao'
. Я хочу m
дополнительных столбцов, где m
- максимальное количество словарей с ключом 'funDes'
для этих 311 словарей, так что каждая ячейка содержит значение 'funDes'
, когда такое значение существует, и '-88'
когда он не существует (когда он равен нулю или максимальное количество словарей с 'funDes'
меньше, чем m
, для некоторых из этих 311 словарей).
Может кто-нибудь дать несколько советов о том, какчтобы решить это?