python 字典 get方法

在做项目的过程中,遇到了一个问题,数据保存到字典中,后来发现数据不对,排查了字典的构建过程,是OK的,后来怀疑是别的部分共用了这一个字典,排查代码,发现这里应该是有问题的。

score = None
deltaScore = result.get('score', [0 for _ in range(4)]
if not score:
    score = deltaScore
else:
    for index in range(4):
        score[index] += deltaScore[index]

 代码逻辑是从字典中获取score键的值,score为None,则直接将deltaScore赋值给score,而没有注意的是dict的get方法,是将该键的的内存赋值给deltaScore,是一个list,deltaScore再赋值给score,score、deltaScore、dict中的score键共用了一份内存,在else部分,修改score,也修改了dict的值。

最主要的是要了解python的数据类型, 从以下的验证代码也可以看出:

>>> a = {"test1":[1,2,3], "test2":[4,5,6]}
>>> improt json
File "<stdin>", line 1
improt json
^
SyntaxError: invalid syntax
>>> b = a.get("test1", [0 for _ in range(3)])
>>> print b
[1, 2, 3]
>>> for index in range(3):
... b[index] += 1
...
>>>
>>> print b
[2, 3, 4]
>>> print a
{'test1': [2, 3, 4], 'test2': [4, 5, 6]}
>>>

 

转载于:https://www.cnblogs.com/yuanhuikai/p/7220556.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值