鱼C论坛

 找回密码
 立即注册
查看: 590|回复: 1

[已解决]新手入门,字典覆盖问题

[复制链接]
发表于 2024-3-17 21:02:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请教大佬,为什么第二个字典的数据会覆盖第一个字典的数据呢?



list_init = []
hobby01 = {}
num = 0
while True:
    name = input("请输入姓名:")
    if name == "":
        break
    while True:
        num += 1
        hobby_num = input("请输入第"+ str(num) +"个爱好:")
        if hobby_num == "":
            num = 0
            break
        hobby01["第"+ str(num) +"爱好"] = hobby_num
    hobby = {name: hobby01}
    list_init.append(hobby)
print(list_init)
最佳答案
2024-3-17 21:02:55
你好!在这段代码中,第二个字典的数据会覆盖第一个字典的数据是因为在循环中,你重复使用了同一个变量`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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-3-17 21:02:55 | 显示全部楼层    本楼为最佳答案   
你好!在这段代码中,第二个字典的数据会覆盖第一个字典的数据是因为在循环中,你重复使用了同一个变量`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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 10:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表