python - 如何使用字典修复此功能以添加和打印添加的人?
问题描述
目前我试图解决我编写的代码中的一个问题,出于某种原因,每当我调用 imprimir() 时,它只显示最后添加的人,而它应该显示所有添加的人。
libro = {}
def agregar(rut, nombre, edad):
estudiante = {}
estudiante['rut'] = rut
estudiante['nombre'] = nombre
estudiante['edad'] = edad
libro['rut'] = estudiante
def imprimir():
for rut in libro:
estudiante = libro[rut]
print(estudiante['rut'], estudiante['nombre'], estudiante['edad'])
def main():
contador = 0
while contador < 2:
rut = input("rut: ")
nombre = input("nombre: ")
edad = input("Edad: ")
contador = contador + 1
agregar(rut, nombre, edad)
imprimir()
main()
我将代码限制为只能添加 2 个人。所以如果我写的第一个人,rut = 1, nombre = 1 和 edad = 1,而对于第二个人,rut = 2, nombre = 2 和 edad = 2。在使用 main() 时,它应该打印:1 1 1 2 2 2 但它只是打印 2 2 2 而没有找到 1 1 1,我的猜测是添加的人没有被添加,而是被重写,但我找不到原因,如果我在 while 中包含 imprimir() main() 它会在我添加完一个人后立即打印每个人,但它的想法是,一旦我完成添加他们,程序应该打印所有添加的人。
解决方案
问题是您使用相同的键添加项目,因此dict
您添加的每个条目都会覆盖最后一个值...
libro = {}
def agregar(rut, nombre, edad):
estudiante = {}
estudiante['rut'] = rut
estudiante['nombre'] = nombre
estudiante['edad'] = edad
# this would override the previous entry since it's always the same key
libro['rut'] = estudiante
# use a key that is unique and all entries will be preserved
libro[rut] = estudiante
# or for some truly unique keys
libro[str(uuid.uuid4())] = estudiante
推荐阅读
- javascript - VS Code:有谁知道如何使“无法解析 SourceMap”控制台警告消失?
- java - spring webflux 所有 api 都给出 UnsupportedMediaTypeException
- android - Android Studio videoView - 流意外结束
- python - 通过文本定位元素的问题(获取元素属性)
- python - 如何使用 Python 调用/执行 Maya 菜单项?
- linux - 使用脚本外壳保存文件的第 n 行
- jquery - javascript行单独工作,但不是一个接一个
- excel - 如何在 Excel VBA 中使用 WinHttpRequest(WinHTTP 服务)从 Websocket 服务器流式传输数据
- linux - 在构建 install4j 安装程序时,当 dpkg 需要 sudo 时,如何从用户主目录添加和/或删除数据
- extendscript - 如何通过扩展脚本将 After Effects 中的选定合成发送到 AME?