1、字典是由多个键与其对应的值构成的对组成,字典中的键是唯一的,而值并不唯一
phonebook = {‘tom’:'1234','kate':'2345'}
2、dict函数可以通过其他映射或者(键、值)这样的序列对建立字典
>>> item = [("name","tom"),("age","22")]
>>> d = dict(item)
>>> d
{'name': 'tom', 'age': '22'}
dict函数也可以通过关键字参数来创建字典
>>> d = dict(name = "tom",age = 22)
>>> d
{'name': 'tom', 'age': 22}
3、字典的基本行为在很多方面与序列类似
1、len(d)返回d中项的数量
2、d[k]返回关联到键k上的值
3、d[k]=v将值v关联到键k上
4、del d[k]删除键为k的项
5、k in d 检查d中是否含有键为k的项
4、尽管字典和列表有很多特性相同,但也有下面一些重要的区别。
1、键类型:字典的键不一定为整形数据(但也可能是),也可能是其他不可变类型,比如浮点型(实型),字符串或者元组
2、自动添加:即使那个键起初在字典中并不存在,也可以为它分配一个值,这样字典就会建立新的项。而不能将值关联到列表范围之外的索引上。
>>> x = []
>>> x[42] = 'tom'
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
x[42] = 'tom'
IndexError: list assignment index out of range
>>> x = {}
>>> x[42] = 'tom'
>>> x
{42: 'tom'}
3、成员资格:表达式k in d(d为字典)查找的是键,而不是值。表达式v in l(l为列表)则用来查找值,而不是索引。
在字典中检查键的成员资格比在列表中检查值得成员资格更搞笑,数据结构的规模越大,两者的效率差距越明显。
5、字典的格式化字符串
在每个转换说明符中的%字符后面,可以加上(用圆括号括起来的)键,后面再跟上其他说明元素
>>> phonebook = {"alice":"1234","tom":"2345"}
>>> "alice's phone number is %(alice)s" % phonebook
"alice's phone number is 1234"
除了增加的字符串键之外,转换说明符还是像以前一样工作。当以这种方式使用字典的时候,只要给出的键都能在字典中找到,就可以获得任意数量的转换说明符。
6、clear方法清除字典中所有的项。这是个原地操作,所以无返回值。
7、copy方法返回一个具有相同键-值对的新字典,这个方法实现的是浅复制,因为值本身就是相同的,而不是副本
当在副本中替换值的时候,原始字典不受影响,但是如果修改了某个值,原始的字典也会改变,因为同样的值也存储在原字典中。
避免这个问题的一种方法是使用深复制,复制其包含所有的值。可以使用copy模块的deeocopy函数来完成操作
8、fromkeys方法使用给定的键值建立新的字典,每个键默认对应的值为None
>>> {}.fromkeys(['name','age'])
{'name': None, 'age': None}
如果不想使用None作为默认值,也可以自己提供默认值
>>> {}.fromkeys(['name','age'],"unknown")
{'name': 'unknown', 'age': 'unknown'}
9、get方法是个更宽松的访问字典项的方法。一般来说,如果试图访问字典中不存在的项时会出错
>>> d = {}
>>> print(d["name"])
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
print(d["name"])
KeyError: 'name'
>>> print(d.get("name"))
None
除了得到None值,还可以自定义默认值。
10、has_key方法可以检查字典中是否含有给出的键。python3.0中不包含这个函数
11、items方法将所有的字典项以列表方式返回,这些列表项中的每一项都来自于(键、值)
iteritems方法的作用大致相同,但是会返回一个迭代器对象而不是列表
在很多情况下使用iteritems更高效,尤其是想要迭代结果的情况下。
12、keys方法将字典中的键以列表形式返回,而iterkeys则返回针对键的迭代器
13、pop方法用来获得对应于给定的键的值,然后将这个键-值对从字典中移除。
14、popitem方法类似于list.pop,后者会弹出列表的最后一个元素。但不同的是,popitem弹出随机的项,因为字典并没有"最后的元素"或者其他有关顺序的概念。若想一个接一个地移除并处理项,这个方法就非常有效了。
15、setdefault方法在某种程度上类似于get方法,就是能够获得与给定键相关联的值,除此之外,setdefault还能在字典中不含有给定键的情况下设定相应的键值。
>>> d = {}
>>> d.setdefault("name","N/A")
'N/A'
>>> d
{'name': 'N/A'}
>>> d["name"] = "Tom"
>>> d.setdefault("name","N/A")
'Tom'
>>> d
{'name': 'Tom'}
当键不存在的时候,setdefault返回默认值并且相应地更新字典。如果键存在,那么就返回与其对应的值,但不改变字典。默认值是可选的,这点和get一样。如果不设定,会默认使用None
16、update方法可以利用一个字典项更新另外一个字典。提供的字典中的项会被添加到旧的字典中,若有相同的键则会进行覆盖
17、values方法以列表的形式返回字典中的值(itevalues返回值的迭代器)。与返回键的列表不同的是,返回值的列表中可以包含重复的元素。