首页 新闻 赞助 找找看

python中字典的value一直重复覆盖问题怎么解决

0
悬赏园豆:120 [已解决问题] 解决于 2018-07-10 16:07

先给大家看一下代码部分

复制代码
     body_id = 1  # 编号从1开始
        User_Information = {}                           # 用户基本信息字典
        bodies = {}
        while 1:
            name = input("请输入姓名: ")                     # 输入姓名
            weight = int(input("请输入体重(单位Kg): "))       # 输入体重
            height = int(input("请输入身高(单位CM): "))       # 输入身高
            BMI = weight / (height / 100) ** 2              # 计算BMI值
            User_Information["name"] = name                 # 录入姓名 str
            User_Information["weight"] = weight             # 录入体重 int
            User_Information["height"] = height             # 录入身高 int
            User_Information["BMI"] = BMI                   # 录入BMI  Float
            bodies[body_id] = User_Information              # ID对应用户基本信息
            Keep_on = input("是否继续输入(Y/N): ")
            if Keep_on.upper() == "Y":
                body_id += 1
            else:
                break
        print(bodies)
复制代码

 

然后大家看一下运行结果
 
 
 主要问题就是后面输入的用户信息会把前面输入的覆盖了,然后组后bodies里key对应的值全是一样的.是不是因为我User_Information这个字典的位置放得不对还是其他的什么问题,请大佬们指点.
  python初学者,如有其他的错误,请大家一并指出,感谢各位大牛指点
清风吹杨柳的主页 清风吹杨柳 | 初学一级 | 园豆:24
提问于:2018-07-08 15:14
< >
分享
最佳答案
2

User_Information = {} 放到while里面去。

收获园豆:120
czd890 | 专家六级 |园豆:14292 | 2018-07-08 15:23

emmm,我记得之前我就是这样的,然后也是覆盖,我就试着放到上边了,怎么到头来还是要在下边

清风吹杨柳 | 园豆:24 (初学一级) | 2018-07-08 15:29

@清风吹杨柳: 放在while外面,只初始化了一次,意外着是一个对象,不管你while多少次都是修改的同一个对象。只是将同一个对象加入到数组N次。

czd890 | 园豆:14292 (专家六级) | 2018-07-09 09:48

@czd890: 谢谢指点

清风吹杨柳 | 园豆:24 (初学一级) | 2018-07-10 16:06
其他回答(2)
2

首先,你要理解一下 字典这种数据结构他是Key-value这种结构的,key是不可以重复的;你当前写的,第一次完成赋值后,第二次再循环就给他覆盖了,修改的是同一个字典;你可以吧这个字典放到一个列表里

body_id = 1  # 编号从1开始
        User_Information = {}                           # 用户基本信息字典
        bodies = {}
        listUser=[]#列表
        while 1:
            name = input("请输入姓名: ")                     # 输入姓名
            weight = int(input("请输入体重(单位Kg): "))       # 输入体重
            height = int(input("请输入身高(单位CM): "))       # 输入身高
            BMI = weight / (height / 100) ** 2              # 计算BMI值
            User_Information["name"] = name                 # 录入姓名 str
            User_Information["weight"] = weight             # 录入体重 int
            User_Information["height"] = height             # 录入身高 int
            User_Information["BMI"] = BMI                   # 录入BMI  Float
            bodies[body_id] = User_Information              # ID对应用户基本信息
            Keep_on = input("是否继续输入(Y/N): ")
            if Keep_on.upper() == "Y":
                body_id += 1
                listUser.append(User_Information)#加到列表里
            else:
                break
        print(bodies)
        print(User_Information)
DanBrown | 园豆:1321 (小虾三级) | 2018-07-09 10:17

谢谢,已解决,还是感谢

支持(0) 反对(0) 清风吹杨柳 | 园豆:24 (初学一级) | 2018-07-10 16:06
0

User_Information = {} 放在循环里面。

alby | 园豆:323 (菜鸟二级) | 2018-07-10 16:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册