追加到dicts数组只会放入最后一条记录

2024-09-29 19:27:55 发布

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

我有以下问题。我正在组装一个dict数组。但是,append命令只放入最后一条记录。请注意,for递增变量i,并在列表中循环

GITHUB API请求返回items列表中的100条记录,因此我只查看了我感兴趣的信息,并为每条记录形成一个dict,然后将该记录添加到列表中

代码末尾的print()命令显示一个数组,其中all数据等于items数组中的最后一个数据

import requests
import json

def requisicao_api(url):
    resposta = requests.get(url)
    if resposta.status_code == 200:
        return resposta.json()
    else:
        return resposta.status_code

def imprime_repositorios(self):
    dados_api = self.requisicao_api()
    if type(dados_api) is not int:
        for i in range(len(dados_api)):
            print(dados_api[i]['name'])
    else:
        print(dados_api)

urlprincipal = 'https://api.github.com/search/repositories?q=topic:data-science&sort=stars&order=desc&page=1&per_page=100'
dados_api = requisicao_api(urlprincipal)

items = dados_api['items']

def criar_json(nome):
    with open(nome, 'w') as f:
        return f

lista_registros = []

registro = {}

for i in range(len(items)):
    registro[ 'nome' ]    = items[i]['full_name']
    registro[ 'estrelas'] = items[i]['stargazers_count']
    lista_registros.append(registro)

print(lista_registros)

结果:

[{'nome': 'gopherdata/gophernotes', 'estrelas': 2917},
 {'nome': 'gopherdata/gophernotes', 'estrelas': 2917},
 {'nome': 'gopherdata/gophernotes', 'estrelas': 2917},
   ...  100 total
 {'nome': 'gopherdata/gophernotes', 'estrelas': 2917},
 {'nome': 'gopherdata/gophernotes', 'estrelas': 2917}]

Tags: apijson列表for记录items数组print
1条回答
网友
1楼 · 发布于 2024-09-29 19:27:55

您需要像这样在循环中移动字典创建,因为一旦您更改键的值,变量本身就会附加到列表中,它将为该字典的所有副本更新,因为它指向同一个字典,所以列表中的所有值都将只取您传递的最后一个值的值到字典的每一个键

for i in range(len(items)):
    registro = {}
    registro[ 'nome' ]    = items[i]['full_name']
    registro[ 'estrelas'] = items[i]['stargazers_count']
    lista_registros.append(registro)

相关问题 更多 >

    热门问题