购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.3 字典方法

像其他内建类型一样,字典也有方法,这些方法非常有用,不过可能不像使用列表或字符串一样频繁使用。学习本节时可以先简单浏览了解一下有哪些方法可以使用,然后在需要时回过头来查看特定方法的具体用法。

5.3.1 clear()方法

clear()方法用于删除字典内的所有项。

clear()方法的语法如下:

dict.clear()

此语法中dict代表指定字典,该方法不需要参数。该函数是一个原地操作(类似于list.sort)函数,没有任何返回值(返回值为None)。

该方法使用示例如下:

>>> student={'小萌': '1001', '小智': '1002', '小强': '1005','小张': '1006'}
>>> print('字典元素个数为:%d 个' % len(student))
字典元素个数为:4 个
>>> student.clear()
>>> print('字典删除后元素个数为:%d 个' % len(student))
字典删除后元素个数为:0 个

由输出结果可知,字典调用clear方法后整个字典内所有项都被删除。

下面看两个示例。

示例 1:

>>> x={}
>>> y=x
>>> x['key']='value'
>>> y
{'key': 'value'}
>>> x={}
>>> y
{'key': 'value'}

示例 2:

>>> x={}
>>> y=x
>>> x['key']='value'
>>> y
{'key': 'value'}
>>> x.clear()
>>> y
{}

两个示例中,x和y最初对应同一个字典。示例1中,通过将x关联到一个新的空字典对它重新赋值,这对y没有任何影响,还关联到原先的字典。若想清空原始字典中所有元素,则必须使用clear方法,使用clear后,y的值也被清空了。

5.3.2 copy()方法

copy()方法返回一个具有相同键/值对的新字典。这个方法是浅复制(shallow copy),因为值本身是相同的,而不是副本。

copy()方法的语法如下:

dict.copy()

此语法中dict代表指定字典,该方法不需要参数。返回结果为一个字典的浅复制。该方法使用示例如下:

>>> student={'小萌': '1001', '小智': '1002', '小强': '1005','小张': '1006'}
>>> st=student.copy()
>>> print('复制后得到的st为:',st)
复制后得到的st为: {'小强': '1005', '小萌': '1001', '小智': '1002', '小张': '1006'}

由输出结果看到,使用copy方法可以将字典复制给另一个变量。

我们可以通过下面的示例了解什么是浅复制。

>>> student={'小智': '1002', 'info':['小张','1006','man']}
>>> st=student.copy()
>>> st['小智']='1005'
>>> print('更改copy 后的st为:',st)
更改copy 后的st为: {'info': ['小张', '1006', 'man'], '小智': '1005'}
>>> print('原字符串为::',student)
原字符串为:: {'info': ['小张', '1006', 'man'], '小智': '1002'}
>>> st['info'].remove('man')
>>> print('删除后st为:',st)
删除后st为: {'info': ['小张', '1006'], '小智': '1005'}
>>> print('删除后student为:',student)
删除后student 为: {'info': ['小张', '1006'], '小智': '1002'}

由输出结果看到,替换副本的值时原始字典不受影响。如果修改了某个值(原地修改,不是替换),原始字典就会改变,因为同样的值也在原字典中。以这种方式进行复制就是浅复制,而使用深复制(deep copy)可以避免该问题,此处不做讲解,有兴趣的读者可以自己查找相关资料。

5.3.3 fromkeys()方法

fromkeys()方法用于创建一个新字典,以序列seq中的元素做字典的键,value为字典所有键对应的初始值。

fromkeys()方法的语法如下:

dict.fromkeys(seq[, value]))

此语法中dict代表指定字典;seq代表字典键值列表;value代表可选参数,设置键序列(seq)的值。该方法返回结果为列表。

该方法使用示例如下:

>>> seq = ('name', 'age', 'sex')
>>> info = dict.fromkeys(seq)
>>> print ("新的字典为 : %s" %   info)
新的字典为 : {'name': None, 'sex': None, 'age': None}
>>> info = dict.fromkeys(seq, 10)
>>> print ("新的字典为 : %s" %   info)
新的字典为 : {'name': 10, 'sex': 10, 'age': 10}

由输出结果看出,fromkeys方法使用给定的键建立新字典,每个键默认对应的值为None。

5.3.4 get()方法

get()方法返回指定键的值,如果值不在字典中,就返回默认值。

get()方法的语法如下:

dict.get(key, default=None)

此语法中dict代表指定字典,key代表字典中要查找的键,default代表指定键的值不存在时返回默认值。该方法返回结果为指定键的值,如果值不在字典中,就返回默认值None。

该方法使用示例如下:

>>> student={'小萌': '1001', '小智': '1002'}
>>> print ('小萌的学号为: %s' %  student.get('小萌'))
小萌的学号为: 1001

由输出结果看到,get方法使用起来比较简单。再看如下示例:

>>> st={}
>>> print(st['name'])
Traceback (most recent call last):
  File "<pyshell#166>", line 1, in <module>
    print(st['name'])
KeyError: 'name'
>>> print(st.get('name'))
None
>>> print('name 的值为:%s' % st.get('name'))
name 的值为:None

由输出结果看到,其他方法试图访问字典中不存在的项时会出错,而使用get方法就不会。使用get方法访问一个不存在的键时,返回None。这里可以自定义默认值,用于替换None,例如:

>>> st={}
>>> print('name 的值为:%s' % st.get('name','未指定'))
name 的值为:未指定

由输出结果看到,输出结果中用“未指定”替代了None。

5.3.5 key in dict方法

Python字典in操作符用于判断键是否存在于字典中,如果键在字典dict中就返回true,否则返回false。

该方法的语法如下:

key in dict

此语法中dict代表指定字典,key代表要在字典中查找的键。如果键在字典里就返回true,否则返回false。

该方法使用示例如下:

>>> student={'小萌': '1001', '小智': '1002'}
>>> print('小萌在student字典中:%s'%('小萌' in student))
小萌在student 字典中:True
>>> print('小强在student字典中:%s'%('小强' in student))
小强在student 字典中:False

由输出结果看到,已返回对应的True或False。

该方法是Python 3中的方法。在Python 2中有一个有相同功能的方法——has_key方法,has_key方法的使用方式和in不同。

5.3.6 items()方法

items()方法以列表返回可遍历的(键,值)元组数组。

items()方法的语法如下:

dict.items()

此语法中dict代表指定字典,该方法不需要参数。返回结果为可遍历的(键/值)元组数组。

该方法使用示例如下:

>>> student={'小萌': '1001', '小智': '1002'}
>>> print('调用items方法的结果:%s'% student.items())
调用items 方法的结果:dict_items([('小萌', '1001'), ('小智', '1002')])

由输出结果看到,返回结果为一个元组数组。

在Python 2中提供了一个iteritems方法,该方法和items方法的作用大致相同,但是iteritems方法返回的是一个迭代器对象,而不是列表。在Python 3中没有iteritems方法。

5.3.7 keys()方法

keys()方法以列表返回一个字典所有键。

keys()方法的语法如下:

dict.keys()

此语法中dict代表指定字典,该方法不需要参数。返回结果为一个字典所有键。

该方法使用示例如下:

>>> student={'小萌': '1001', '小智': '1002'}
>>> print('字典student所有键为:%s'% student.keys())
字典student 所有键为:dict_keys(['小萌', '小智'])

由输出结果看到,返回的是一个元组数组,数组中包含字典所有键。

5.3.8 setdefault()方法

setdefault()方法和get()方法类似,用于获得与给定键相关联的值。如果键不存在于字典中,就会添加键并将值设为默认值。

setdefault()方法的语法如下:

dict.setdefault(key, default=None)

此语法中dict代表指定字典,key代表查找的键值,default代表键不存在时设置的默认键值。该方法没有任何返回值。

该方法使用示例如下:

>>> student={'小萌': '1001', '小智': '1002'}
>>> print('小强的键值为:%s'% student.setdefault('小强'))
小强的键值为:None
>>> print('小智的键值为:%s'% student.setdefault('小智'))
小智的键值为:1002
>>> print('student 字典新值为:%s'% student)
student 字典新值为:{'小强': None, '小萌': '1001', '小智': '1002'}

由输出结果看到,当键不存在时,setdefault方法返回默认值并更新字典;如果键存在,就返回与其对应的值,不改变字典。和get一样,默认值可以选择,如果不设定就使用None,如果设定就使用设定的值,例如:

>>> student={'小萌': '1001', '小智': '1002'}
>>> print('小强的键值为:%s'% student.setdefault('小强'))
小强的键值为:None
>>> print('小zhang 的键值为:%s'% student.setdefault('小zhang','1006'))
小zhang 的键值为:1006

由输出结果看到,小强没有设置值,使用的是默认值,输出键值为None;小zhang设置的默认值是1006,输出键值为1006。

5.3.9 update()方法

update()方法用于把字典dict2的键/值对更新到dict里。

update()方法的语法如下:

dict.update(dict2)

此语法中dict代表指定字典,dict2代表添加到指定字典dict里的字典。该方法没有任何返回值。

该方法使用示例如下:

>>> student={'小萌': '1001', '小智': '1002'}
>>> student2={'小李':'1003'}
>>> print('原student 字典为:%s'% student)
原student字典为:{'小萌': '1001', '小智': '1002'}
>>> student.update(student2)
>>> print('新student 字典为:%s'% student)
新student字典为:{'小李': '1003', '小萌': '1001', '小智': '1002'}
>>> student3={'小李':'1005'}
>>> student.update(student3) #对相同项覆盖
>>> print('新student 字典为:%s'% student)
新student字典为:{'小李': '1005', '小萌': '1001', '小智': '1002'}

由输出结果看到,提供的字典中的项被添加到旧字典中,如果有相同的键就会覆盖。

5.3.10 values()方法

values()方法以列表形式返回字典中所有值。与返回键的列表不同,返回的列表中可以包含重复的元素。

values()方法的语法如下:

dict.values()

此语法中dict代表指定字典,该方法不需要参数。返回结果为字典中的所有值。

该方法使用示例如下:

>>> student={'小萌': '1001', '小智': '1002','小李':'1001'}
>>> print('student 字典所有值为:%s'% list(student.values()))
student 字典所有值为:['1001', '1001', '1002']

由输出结果看到,返回的列表中包含重复的元素。 /hJlWmswMd5ozJbc74Em+sMVjTsHAq+e5bLz2GWpWfKd9Xy/Giuy0NluCtEmCoBV

点击中间区域
呼出菜单
上一章
目录
下一章
×