7 字典

2017-04-20  本文已影响2人  阿健在长安

0. 引用廖雪峰的话

列表、元组、字符串是序列类型,而字典是映射类型。
举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list:

names = ['Michael', 'Bob', 'Tracy']
scores = [95, 75, 85]

给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,list越长,耗时越长。
如果用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用Python写一个dict如下:

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95

1. 创建和访问字典

字典由“键-值”组成:{键1:值1,键2,值2,......}

dict = {1:'one',2:'two',3:'three'}
print(dict[3])    #three

注意:字典里面的键值是无序的,只能通过键去索引值,这不同于列表和元组。

2. 内置方法

1. fromkeys():创建并返回一个新的字典,常用于字典的初始化

>>> dict = {}
>>> dict.fromkeys((1,2,3))
{1: None, 2: None, 3: None}
>>> dict    #注意这里dict还是原来的空字典,fromkeys()返回了一个新字典
{}
>>> dict.fromkeys((1,2),'hello')
{1: 'hello', 2: 'hello'}    #它并不会只修改1,2键的值,而是返回一个新的字典

2. key():返回字典键的引用

>>> dict1 = dict.fromkeys(range(3),'赞')
>>> for i in dict1.keys():
    print(i)    
0
1
2

3. values():返回字典值的引用

4. items():返回字典项的引用

for i in dict1.items():
    print(i)
(0, '赞')
(1, '赞')
(2, '赞')

5. clear():清空一个字典

>>> dict.clear()
>>> dict
{}

注意:虽然dict = {}也能清空字典,但是有些时候还是有区别的,比如下面的例子。

>>> a = {'name':'Tom'}        #a指向一个字典
>>> b = a                            #b也指向这个字典
>>> a = {}                           #a指向一个空字典,但不影响b
>>> b
{'name': 'Tom'}

>>> a = {'name':'Tom'}    #a指向一个字典
>>> b = a                        #b也指向这个字典
>>> a.clear()                   #a清空,b也随之清空了
>>> b
{}

6. copy():浅拷贝

重点说浅拷贝与赋值的区别

>>> a = {1:'one',2:'two'}    #a指向一个字典
>>> b = a.copy()               #b为a的一个拷贝,即b指向另一个字典,内容与a指向的字典相同
>>> c = a                           #c也指向a所指向的字典,那下面的现象容易理解
>>> id(a)
49783312
>>> id(b)
49770864
>>> id(c)
49783312
>>> c[3] = 'three'
>>> a
{1: 'one', 2: 'two', 3: 'three'}
>>> b
{1: 'one', 2: 'two'}

7. 再谈in

>>> list = [1,2,3]
>>> 3 in list
True
>>> dict = {1:'one',2:'two'}
>>> 1 in dict
True
>>> 'one' in dict
False

8. pop()和popitem()

>>> a = {1:'one',2:'two',3:'three'}
>>> a.pop(2)    #指定键,弹出值
'two'
>>> a
{1: 'one', 3: 'three'}
>>> a.popitem()    #因为字典的键值是无序的,所以会随机弹出一项
(1, 'one')

9. setdefault()与get()

>>> a = {3: 'three'}
>>> a.setdefault('abc')
>>> a
{3: 'three', 'abc': None}
>>> a.setdefault(5,'five')
'five'
>>> a
{3: 'three', 'abc': None, 5: 'five'}
>>> a.get(10)    #一般情况下,字典索引一个不存在的键时会报错,而用get()不会
>>> a
{3: 'three', 'abc': None, 5: 'five'}
>>> a.get(2,'two')
'two'
>>> a
{3: 'three', 'abc': None, 5: 'five'}

10. update()

用字典或映射去更新另一个字典,类似list中的extend()。

>>> b = {'我来':'更新'}
>>> a.update(b)
>>> a
{3: 'three', 5: 'five', '我来': '更新', 'abc': None}
上一篇下一篇

猜你喜欢

热点阅读