龙空技术网

Python入门系列21-Python内置数据结构之字典操作

午后阳台 60

前言:

此时大家对“python列表包含字典”大约比较关怀,朋友们都想要了解一些“python列表包含字典”的相关文章。那么小编同时在网络上汇集了一些有关“python列表包含字典””的相关内容,希望咱们能喜欢,咱们一起来学习一下吧!

在Python编程中使用字典必然需要对它进行各种操作,比如取值、删除某个键值对、增加某个键值对、循环、判断键存在等等,而这些操作都可以通过字典自带的方法来轻松的完成。

我们先来查看字典自带有哪些方法。

>>> dir({})['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

没错,上面我使用两个大括号来声明一个字典,并没有预先去声明一个有键值对的字典。

我们同样忽略以双下划线开头的方法和属性,实际上我们以后几乎都是跟这些方法打交道的。

1、values、keys和items方法

这三个方法很像,values方法会返回字典的所有值,而keys方法会返回字典的所有键,items方法则返回由键和值组成的元组为元素的数据结构,这对我们需要收集字典的值、键或者键值对的时候是很有帮助的。

>>> help({}.values)  # 查看字典values方法的帮助文档Help on built-in function values:values(...) method of builtins.dict instance    D.values() -> an object providing a view on D's values>>>>>> help({}.keys) # 查看字典keys方法的帮助文档Help on built-in function keys:keys(...) method of builtins.dict instance    D.keys() -> a set-like object providing a view on D's keys>>>>>> help({}.items)Help on built-in function items:items(...) method of builtins.dict instance    D.items() -> a set-like object providing a view on D's items>>>>>> url = {'baidu': ';,'google': ';,'douban': ';,'python': ';,}>>> url{'baidu': ';,'google': ';,'douban': ';,'python': ';,}>>> url.values()  #在Python3中,values方法返回一个dict_values,在Python2中会返回一个包含字典值的列表dict_values([';, ';, ';, ';])>>> list(url.values()) #我们可以利用内置函数list把dict_values转换成列表[';, ';, ';, ';]>>>>>> url.keys()dict_keys(['baidu', 'google', 'douban', 'python'])>>> list(url.keys())['baidu', 'google', 'douban', 'python']>>>>>> url.items() dict_items([('baidu', ';), ('google', ';), ('douban', ';), ('python', ';)])>>> list(url.items())[('baidu', ';), ('google', ';), ('douban', ';), ('python', ';)]

2、pop和popitem方法

这两个方法有点似曾相识,没错,在列表操作那一章中也讲到这个方法,方法的作用都差不多,都是把数据结构中的元素给剔除掉,但这两个方法的用法有差别。

>>> help({}.pop)Help on built-in function pop:pop(...) method of builtins.dict instance    D.pop(k[,d]) -> v, remove specified key and return the corresponding value.    If key is not found, d is returned if given, otherwise KeyError is raised>>>>>> help({}.popitem)Help on built-in function popitem:popitem(...) method of builtins.dict instance    D.popitem() -> (k, v), remove and return some (key, value) pair as a    2-tuple; but raise KeyError if D is empty.

从上面这两个方法的帮助文档可以知道:

pop方法可以接收两个参数,一个必须提供,一个是可选的。必须提供的是字典的键,如果字典存在该键,则会剔除对应的值并返回。如果提供的键在字典中不存在,则会报错,除非同时提供一个可选的参数,则会返回该可选参数。

popitem方法则不接收任何参数,它会随机返回一个由键和值组成的元组,如果空字典使用该方法则会产生一个KeyError错误。

>>> url = {'baidu': ';,'google': ';,'douban': ';,'python': ';,}>>> url{'baidu': ';,'google': ';,'douban': ';,'python': ';,}>>> url.pop('baidu')  # 剔除键'baidu'对应的值';>>> url{'google': ';,'douban': ';,'python': ';,}>>> url.pop('sina') # 剔除一个不存在的键,并且不提供可选参数Traceback (most recent call last):  File "D:\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2963, in run_code    exec(code_obj, self.user_global_ns, self.user_ns)  File "<ipython-input-136-2406404084fd>", line 1, in <module>    url.pop('sina')KeyError: 'sina'>>> url.pop('sina', 'None') # 剔除一个不存在的键,并且提供可选参数'None'>>>>>> url.popitem()('google', ';)>>> {}.popitem()  #空字典执行popitem方法,会产生错误Traceback (most recent call last):  File "D:\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2963, in run_code    exec(code_obj, self.user_global_ns, self.user_ns)  File "<ipython-input-138-660ae4b74927>", line 1, in <module>    {}.popitem()KeyError: 'popitem(): dictionary is empty'

3、get方法

字典get方法用于获取对应键的值,它中括号法一样,可以获取字典的值,但是它两对待键不存在的情况时表现又不一样。

利用中括号法获取字典某个值的时候,如果字典中不存在该键,则会删除错误。而利用get方法不会报错,这也是推荐大家使用get方法获取值的原因。

get方法可以接收两个参数,一个是必须提供,一个是可选的。键是必须提供的参数,如果字典存在该键,则返回对应的值。如果字典不存在该键,则会返回一个None数据类型,除非提供可选参数来让找不到键的情况下返回可选参数。

>>> help({}.get)Help on built-in function get:get(...) method of builtins.dict instance    D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.>>>>>>  url = {'baidu': ';,'google': ';,'douban': ';,'python': ';,}>>> url{'baidu': ';,'google': ';,'douban': ';,'python': ';,}>>> url.get('baidu')  # 返回键'baidu'对应的值';>>> print(url.get('zhihu')  #试图获取一个不存在的键,不提供可选参数的情况下返回None None>>> url.get('zhihu', ';)  # 返回可选参数 ';>>>>>> url['baidu'] ';>>> url['zhihu']  # 没得商量,会产生一个KeyError错误Traceback (most recent call last):  File "D:\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2963, in run_code    exec(code_obj, self.user_global_ns, self.user_ns)  File "<ipython-input-161-7d75b393b9db>", line 1, in <module>    url['zhihu']KeyError: 'zhihu'

4、update方法

要扩展现有字典经常碰到,也叫作更新字典,该方法可以提供多种类型的参数,比如字典、有特殊要求的列表或者元组。

>>> help({}.update)Help on built-in function update:update(...) method of builtins.dict instance    D.update([E, ]**F) -> None.  Update D from dict/iterable E and F.    If E is present and has a .keys() method, then does:  for k in E: D[k] = E[k]    If E is present and lacks a .keys() method, then does:  for k, v in E: D[k] = v    In either case, this is followed by: for k in F:  D[k] = F[k]>>>>>> url = {'baidu': ';,'google': ';,'douban': ';,'python': ';,}>>> url{'baidu': ';,'google': ';,'douban': ';,'python': ';,}>>> new_dict = {'zhihu': ';} #定义一个新的字典>>> url.update(new_dict)>>> url{'baidu': ';, 'google': ';, 'douban': ';, 'python': ';, 'zhihu': ';}>>>>>> url.update([('name', 'python'),( 'age',28)]){'baidu': ';, 'google': ';, 'douban': ';, 'python': ';, 'zhihu': ';, 'name': 'python', 'age': 28}

5、setdefaut方法

setdefautl方法可以说是get方法的升级版,该方法同样也可以接收两个参数,一个必须提供,就是字典的键。另一个是可选的,在有些时候这个可选参数作用很大。

1、如果两个参数同时提供,当字典中存在该键时,则返回键对应的值。如果字典中不存在该键,则该字典会利用键参数为新键,可选参数为值作为新元素添加的字典中,并且返回可选参数。

2、如果只提供键参数,如果字典中存在该键,则返回对应值。如果不存在,则返回None

>>> help({}.setdefault)Help on method_descriptor:setdefault(...)    D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D>>> d = {}>>> d.setdefault('name') #空字典不存在该键,返回None>>> d.setdefault('name', 'Python')'

6、删除字典键值对及字典

除了可以使用pop和popitem方法来删除字典键值对外,我们可以使用del来删除。

>>>  url = {'baidu': ';,'google': ';,'douban': ';,'python': ';,}>>> url{'baidu': ';,'google': ';,'douban': ';,'python': ';,}>>> del url['baidu'] #删除某个键值对>>> url{'google': ';, 'douban': ';, 'python': ';}>>> del url #删除整个字典>>> url # url已不存在,会报错Traceback (most recent call last):  File "D:\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2963, in run_code    exec(code_obj, self.user_global_ns, self.user_ns)  File "<ipython-input-196-5446fb31b66c>", line 1, in <module>    urlNameError: name 'url' is not defined

标签: #python列表包含字典