如何在循环中制作具有相同键的字典

How to make a dictionary of dictionaries with same keys in a loop

你好我是 python 的新手,我正在尝试制作一个可以包含多个词典的词典(取决于用户想要的数量)并且每个词典都具有与前一个词典相同的键.输出类似于:

{0: {'Name': 'test1', 'Matiere': ['algo','python'], 'Notes': [[11,12],[15,13]}, 
 1: {'Name': 'test2', 'Matiere': ['algo'], 'Notes': [[11]]}}

但我得到的是第二个字典的值覆盖了第一个字典的值,我得到的输出如下:

{0: {'Name': 'test2', 'Matiere': ['algo'], 'Notes': [[11]}}, 
 1: {'Name': 'test2', 'Matiere': ['algo'], 'Notes': [[11]]}}

这是我的代码:

def ajout():
    TS = int(input("Donner le nombre d'etudiants: "))
    tmp=[]
    for i in range(TS):
        Student['Name']=input(f"Donner le nom de L'etudiant n{i+1}: ")
        x=int(input("Donner le nombre de matieres : "))
        for j in range(x):
            tmp.append(input(f"Donner la matiere n{j+1}: "))
        Student['Matiere']=tmp
        tmp=[]
        tmp1=[]
        for j in range(len(Student['Matiere'])):
            y=int(input(f"Donner le nombre de notes du {Student['Matiere'][j]}: "))
            for k in range(y):
                tmp.append(int(input(f"Donner la note n{k+1}: ")))
            tmp1.append(tmp)
            tmp=[]
            Student['Notes']=tmp1
        print(Student)
        Students[i]={}
        Students[i]=Student
    print(Students)
ajout()

我可以更改什么以使其不覆盖值,而是根据用户键入的内容具有不同的值。

PS : 这是

的图片

我想你在 ajout 范围之外初始化了 Student

因此,每次您执行 Students[i]=Student 时,都会将相同的变量添加到字典中,并擦除您使用 Students[i]={} 实例化的新变量。由于 Student 始终是相同的底层字典结构,因此 Students 中的每个元素实际上仅引用字典。这也解释了为什么 Student['whatever'] = ... 会修改 Students.

的每个元素

尝试在 ajout 开头的某处插入 Student = {} ;)
附带一提,有几个没用的tmp=[],这里你只需要一个!