如何在循环中制作具有相同键的字典
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=[]
,这里你只需要一个!
你好我是 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=[]
,这里你只需要一个!