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



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

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

代码末尾的print()命令显示一个数组,其中所有数据等于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}]

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

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