Python基础知识:快速了解字典的增删改查以及自定义不可变字典

字典在很多的高级语言中是很常见的,java中的hashmap,php中的键值对的数组,python中的是dict,它是一个可变的容器模型,可以存储任意的数据结构,但是容器中的每个元素都是以键值对的形式存在的,形如key => value,python中是用冒号分隔,每个键值对用逗号分隔,所有的键值对用大括号包围起来。当然字典中还可以包含其他的字典,层级深度可以任意。有点儿像json,如果不了解python中的字典和json之间的转换可以看看这篇文章。

Python 2.7.13 (default, Nov 24 2017, 17:33:09) 
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
>>> dict['Name']
'Zara'
>>> dict['notExist']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'notExist'
>>> del dict['Age']
>>> dict
{'Name': 'Zara', 'Class': 'First'}
>>> dict.clear()
>>> dict
{}
>>> if 'Age' in dict:
...     print True
... else:
...     print False
... 
False

那么如何遍历一个字典的对象呢?这里有几种方法,第一种是我们直接for循环,拿到key,那么值就是字典的索引key;第二种就是字典有个方法是items,我们可以遍历这个items的返回值。千万要注意字典不是元组,是不会直接返回key,value这样的结果的。

>>> for key, value in dict:
...     print('%s => %s' % (key, value))
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
>>> for key, value in dict.items():
...     print('%s => %s' % (key, value))
... 
Beth => 9102
Alice => 2341
Cecil => 3258
>>> for key in dict:
...     print('%s => %s' % (key, dict[key]))
... 
Beth => 9102
Alice => 2341
Cecil => 3258

要注意一点的是如果这个key不在字典内,我们直接使用的话会出现异常KeyError,我们需要预先判断这个key是否在字典内,有两种方法,has_key(key)和key in dict来判断这个key是否在字典内,不过第二种方法更容易接受点,因为它更加的接近我们的语言。del这个key的所以会把元素从字典中直接删除,调用clear()方法可以直接把字典清空,然后就剩下一个空的字典{}。

有的时候我们需要一个不可变的字典,只能通过实例化的时候初始化这个字典,不能添加、更新、和删除。这个时候我们需要用到模块collections.MultiMapping了,集成类MultiMapping,改写它的方法,将setitemdelitem直接抛出异常,这样我们就得到了一个不可变的字典了。

0 comments

To reply to the article, please Login or registered