如何循环遍历我的for循环每个元素来获取这个json的值?

2024-09-27 00:20:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图解析的json有一个复杂的结构。在完整的列表中,有311个字典,我从中获得了一些键值。然而,在这311个字典中的每一个字典中,都有一个键'cadCargosFuncoes',它的值是一个有一个键的字典,它的值本身就是一个字典列表

我需要的是,对于json的311个字典中的每一个,在它的每一个n字典中获取键值'funDes',其中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是这311个字典中键为'funDes'的字典的最大数目,这样每个单元格都包含了'funDes'的值,如果存在这样的值,以及'-88'当它不存在时(当它为空或者对于某些311个字典,'funDes'的最大字典数小于m

有人能给我一些建议吗


Tags: csvinimportptjson列表for字典

热门问题