你好!在这段代码中,第二个字典的数据会覆盖第一个字典的数据是因为在循环中,你重复使用了同一个变量`hobby01`来存储爱好。由于字典是可变对象,在循环中多次使用同一个变量时,实际上是将相同的字典对象赋值给了不同的键。
解决此问题有两种方法:
方法一:在每次循环开始前,重新创建一个空字典来存储当前姓名对应的爱好,然后再将该字典添加到列表中。代码如下:
list_init = []
while True:
name = input("请输入姓名:")
if name == "":
break
hobby_dict = {} # 创建一个空字典来存储爱好
num = 0 # 每次循环重新计数
while True:
num += 1
hobby_num = input("请输入第"+ str(num) +"个爱好:")
if hobby_num == "":
break
hobby_dict[num] = hobby_num # 将爱好添加到字典中,键为序号
list_init.append({name: hobby_dict}) # 将当前姓名和对应的爱好字典添加到列表中
print(list_init)
方法二:在每次循环开始前,创建一个空列表来存储当前姓名对应的爱好,然后再将该列表作为值添加到字典中。代码如下:
list_init = []
while True:
name = input("请输入姓名:")
if name == "":
break
hobby_list = [] # 创建一个空列表来存储爱好
num = 0 # 每次循环重新计数
while True:
num += 1
hobby_num = input("请输入第"+ str(num) +"个爱好:")
if hobby_num == "":
break
hobby_list.append(hobby_num) # 将爱好添加到列表中
list_init.append({name: hobby_list}) # 将当前姓名和对应的爱好列表字典添加到列表中
print(list_init)
希望对你有所帮助!如还有疑问,欢迎继续提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |