1.字典的主要属性
1.通过键而不是通过偏移来读取
2.任意对象的无序集合
3.可变长、异构、任意嵌套
4.属于可变映射类型
5.对象引用表(和列表一样,字典储存的是对象引用)
2.操作
2.1成员关系:键存在测试
>>> d = {'food':'cake'}
>>> 'cake' in d
False
>>> 'food' in d
True
2.2keys、values和items方法
keys方法能返回字典中所有的键,可以将它们收集在一个列表,对于按顺序处理字典是非常有用的。
values返回所有的值,keys、values和items返回的是可迭代视图,而不是列表。
>>> d = {'a':1,'b':2,'c':3}
>>> d.keys()
dict_keys(['a', 'b', 'c']) #可迭代视图
>>> list(d.keys())
['a', 'b', 'c']
>>> list(d.items())
[('a', 1), ('b', 2), ('c', 3)]
2.3get方法
读取不存在的键会出错,使用get方法能够返回默认值none(或自定义)
>>> d['d']
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
d['d']
KeyError: 'd'
>>> d.get('d','N')
'N'
2.4update方法
字典的update方法类似于合并,但是和位置顺序无关;会覆盖相同键的值
>>> d = {'a':1,'b':2,'c':3}
>>> d1 = {'c':6,'d':7}
>>> d.update(d1)
>>> d
{'a': 1, 'b': 2, 'c': 6, 'd': 7}
#a.update(b):用b来更新a, b不变。
3.for 循环遍历
>>> for key in d:print(key,' ',d[key])
a 1
b 2
c 6
d 7
#注意for循环迭代每一个键,for key in d等同于for key in d。keys()
4.字典用法注意事项
1.序列运算无效
2.对新索引赋值会添加项
3.键不一定总是字符串(任何不可变对象都是可以的,例如整数(可以用来模拟列表,例如:d = {},d[99] ='abc'))
5.创建字典的四种方法
1.传统的文字表达(事先拼出整个字典时)
{’name':'Bob','age':18}
2.通过键逐个赋值
d = {} (需要一次动态建立字典的一个字段时)
d['name']='Bob'
d['age']=18
3.关键字参数形式 (键必须都是字符串才行)
dict(name='Bob',age=18)
4.(键,值)元组形式 (程序运行时把键和值逐步形成序列时,比较有用)
dict([('name','Bob'),('age',18)])
6.fromkeys、zip()函数以及字典解析
6.1fromkeys
如果所有键的值都相同,可以传入一个键列表,以及初始值
>>> dict.fromkeys(['a','b','c'],0)
{'a': 0, 'b': 0, 'c': 0}
>>> dict.fromkeys('abc',0)
{'a': 0, 'b': 0, 'c': 0}
>>> dict.fromkeys('abc')
{'a': None, 'b': None, 'c': None}
6.2zip()函数
>>> zip(['a','b','c'],[1,2,3])
<zip object at 0x031BD030>
>>> list(zip(['a','b','c'],[1,2,3]))
[('a', 1), ('b', 2), ('c', 3)]
#通过zip()函数创建字典 dict(zip(keyslist,valslist))
>>> dict(zip(['a','b','c'],[1,2,3]))
{'a': 1, 'b': 2, 'c': 3}
6.3字典解析
#与fromkeys类似
>>> d={x:0 for x in ['a','b','c']}
>>> d
{'a': 0, 'b': 0, 'c': 0}
#与zip类似
>>> d = {k:v for (k,v) in zip(['a','b','c'],[1,2,3])}
{'a': 1, 'b': 2, 'c': 3}
7.字典视图
字典的keys、values和items都返回视图对象,python2.6中它们返回实际的结果列表,视图对象是可迭代的,这就意味着对象每次产生一个结果项,而不是在内存中立即产生结果列表。字典视图还保持了字典成分的最初顺序,反映字典未来的修改,并且能够支持集合操作。它们不是列表,并不支持索引和列表sort方法,打印时也不显示自己的项。
#字典视图并非创建之后不能修改,它们可以动态反映在视图对象创建后对字典做出的修改
>>> d = {'a':1,'b':2,'c':3}
>>> k = d.keys()
>>> v = d.values()
>>> k
dict_keys(['a', 'b', 'c'])
>>> v
dict_values([1, 2, 3])
>>> del d['c']
>>> k
dict_keys(['a', 'b'])
>>> v
dict_values([1, 2])
keys()方法所返回的视图对象类似于集合,并且支持交集和并集等常见的集合操作;values视图不是这样的,因为它们不是唯一的,但items结果是。
>>> k | {'x':9}
{'b', 'x', 'a'}
>>> v | {'x':9}
Traceback (most recent call last):
File "<pyshell#34>", line 1, in <module>
v | {'x':9}
TypeError: unsupported operand type(s) for |: 'dict_values' and 'dict'
>>> d.items() | {'x':9}
{('b', 2), 'x', ('a', 1)}
keys不会返回列表,要想排序键,要么转换为列表,要么在键视图或字典自身上使用sorted()函数
>>> d = {'a':1,'b':2,'c':3}
>>> k = d.keys()
>>> k.sort()
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
k.sort()
AttributeError: 'dict_keys' object has no attribute 'sort'
>>> K = list(k)
>>> K.sort(reverse = True)
>>> K
['c', 'b', 'a']
>>> sorted(d,reverse = True)
['c', 'b', 'a']
>>> sorted(d.keys(),reverse = True)
['c', 'b', 'a']