python字典更新时出现value为None的情况

字典在python中是非常重要的一种结构,因其用哈希的方式存储数据,其复杂度为O(1),速度非常快。

大多数的情况下,更改字典里key对应的值,会使用重新赋值的方法

person = {'name': 'jack', 'age': 18}
print person
person['name'] = 'jhon' # 修改字典的值
print person

运行结果

{'age': 18, 'name': 'jack'}
{'age': 18, 'name': 'jhon'}

python内置的字典类型是无序的,所以输出结果和原来的字典顺序是不一样的。

如果,key对应的值是一个对象或者数据结构,该怎么去修改其对应的值呢,如:对应的值是一个列表

person = {'name': ['jack', 'alis'], 'age': 18}
print person
person['name'] = person['name'].append('hanjun') # 修改字典的值
print person

运行结果

{'age': 18, 'name': ['jack', 'alis']}
{'age': 18, 'name': None}

结果中name对应的值为None,这样就出现了细节上的bug,并且这个bug是不容易被发现的,看起来好像没什么错。

这种错误就说明对python的理解还不够,本人就遇到了这个坑,而且花了好几个小时的时间,悲哀呀。

正确的做法应该是:

person = {'name': ['jack', 'alis'], 'age': 18}
print person
person['name'].append('hanjun') # 修改字典的值
print person

运行结果

{'age': 18, 'name': ['jack', 'alis']}
{'age': 18, 'name': ['jack', 'alis', 'hanjun']}

对字典的值直接添加,而不是用再赋值的方式,再赋值的方式为什么会错呢?

因为,列表list的append是一个方法,该方法的返回值为None(没有返回值就会返回None),所以key为name的值就为None了。

 

欢迎关注公众号:日常bug,每天写至少一篇技术文章,每天进步一点点。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值