字典在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,每天写至少一篇技术文章,每天进步一点点。