第4章 Python笔记 字典

xiaoxiao2021-02-27  267

一、创建和使用字典

字典由多个建及与其对应的值构成键—值(也称项)对组成。每个键和它的值之间用(:)隔开,项之间用逗号(,)隔开,而整个字典由一对大括号括起来。字典中的键是唯一的,而值并不唯一。

>>> phonebook={'Alice':'2341','Beth':'9102','Cecil':'3258'} 1、dict函数 dict函数可以通过其他映射或者(键,值)对的序列建立字典。

>>> items=[('name','Gumby'),('age',42)] >>> d=dict(items) >>> d {'age': 42, 'name': 'Gumby'} >>> d['name'] 'Gumby'dict函数也可以通过关键字参数来创建字典:

>>> d=dict(name='Gumby',age=42) >>> d {'age': 42, 'name': 'Gumby'} 2、基本字典操作

d表示字典

(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的项。 字典与列表的不同之处:

(1)键类型:字典的键不一定是整形数据(但也可以是),键可以是任意的不可变类型,如浮点型(实型)、字符串或者元组。

(2)自动添加:即使键起初在字典中并不存在,也可以为它赋值,这样字典就会建立新的项。

(3)成员资格:表达式k in d 查找的是键,而不是值。对于列表来说查找的就是值。 3、字典的格式化字符串

字典的格式化字符串是在每个转换说明符中的%字符后面,可以加上键(用圆括号括起来),后面再跟上其他说明元素。

>>> phonebook={'Beth':'9102','Alice':'2341','Cecil':'3258'} >>> phonebook {'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'} >>> "Cecil's phone number is %(Cecil)s."%phonebook "Cecil's phone number is 3258." 4、字典的方法

4.1 clear方法清除字典中的所有项。该方法是原地操作,无返回值。

>>> x={} >>> y=x >>> x['key']='value' >>> y {'key': 'value'} >>> x={} >>> y {'key': 'value'} >>> x={} >>> y=x x >>> x['key']='value' >>> y {'key': 'value'} >>> x.clear() >>> y {}4.2 copy方法返回一个具有相同键—值对的新字典(浅复制)。

>>> x={'username':'admin','machines':['foo','bar','baz']} >>> y=x.copy() >>> y['username']='mlh' >>> y['machines'].remove('bar') >>> y {'username': 'mlh', 'machines': ['foo', 'baz']} >>> x {'username': 'admin', 'machines': ['foo', 'baz']}由上面的程序可以看到,挡在副本中替换值时,原字典不受影响,但是,如果修改了某个值,原始的值也会改变。避免这种情况可以使用深复制(可使用copy模块的deepcopy函数),复制其包含的所有值。 >>> from copy import deepcopy >>> d={} >>> d['names']=['Alfred','Bertrand'] >>> c=d.copy() >>> dc=deepcopy(d) >>> d['names'].append('Clive') >>> c {'names': ['Alfred', 'Bertrand', 'Clive']} >>> dc {'names': ['Alfred', 'Bertrand']}4.3 fromkeys方法使用给定的键建立新的字典,每个键默认对应的值为None。

>>> {}.fromkeys(['name','age']) {'age': None, 'name': None}也可直接在所有字典的类型dict上面调用方法

>>> dict.fromkeys(['name','age']) {'age': None, 'name': None}也可以自己提供默认值

>>> dict.fromkeys(['name','age'],'(unknown)') {'age': '(unknown)', 'name': '(unknown)'}4.4 get用来访问字典中的项,如果访问的项不存在不会报错,只会返回None。

>>> d={} >>> print d['name'] Traceback (most recent call last): File "<pyshell#19>", line 1, in <module> print d['name'] KeyError: 'name' >>> print d.get('name') None也可以更改默认值:

>>> d.get('name','N/A') 'N/A'进行正常访问:

>>> d['name']='Eric' >>> d.get('name') 'Eric'4.5 has_key方法用来检查字典中是否包含给出的键,相当于表达式k in d。在Python 3.0 中不包括该函数。

>>> d={} >>> d.has_key('name') False >>> d['name']='Eric' >>> d.has_key('name') True4.6 items和iteritems

items方法将所有的字典项以列表方式返回,但是项在返回时没有特殊的顺序。

>>> d={'title':'Python Web Site','url':'http://www.python.org','spam':0} >>> d.items() [('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python Web Site')] iteritems返回一个迭代器而不是列表:

>>> it=d.iteritems() >>> it <dictionary-itemiterator object at 0x0206E5A0> >>> list(it) [('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python Web Site')] 4.7 keys和iterkeys

keys方法将字典中的键以列表形式返回,而iterkeys则返回针对键的迭代器。

4.8 pop方法用来获得对应给定键的值,然后将这个键—值从字典中移除。

>>> d={'x':1,'y':2} >>> d.pop('x') 1 >>> d {'y': 2}4.9 popitem方法类似于list.pop,后者会弹出列表的最后一个元素。但是字典没有顺序的概念,是无序的。所以popitem弹出的是随机项,所以字典中没有与append等价的方法。

>>> d={'url':'http;//www.python.org','spam':0,'title':'Python Web Site'} >>> d {'url': 'http;//www.python.org', 'title': 'Python Web Site', 'spam': 0} >>> d.popitem() ('url', 'http;//www.python.org') >>> d {'title': 'Python Web Site', 'spam': 0}4.10 setdefault方法不仅可以获得与给定键相关联的值,还能在字典在不含给定键的情况下设定相应的键值。

>>> d={} >>> d.setdefault('name','N/A') 'N/A' >>> d {'name': 'N/A'} >>> d['name']='Gumby' >>> d.setdefault('name','N/A') 'Gumby' >>> d {'name': 'Gumby'}从上面程序可以看出,setdefault返回默认值并且相应的更新字典。如果键存在,那么就返回与其对应的值,但不改变字典。 4.11 update方法可以利用一个字典项更新另外一个字典:

>>> d={'title':'Python Web Site','url':'http://www.python.org','changed':'Mar 14 22:09:15 MET 2008'} >>> x={'title':'Python Language Website'} >>> d.update(x) >>> d {'url': 'http://www.python.org', 'changed': 'Mar 14 22:09:15 MET 2008', 'title': 'Python Language Website'}提供的字典的项会被添加到旧的字典中,若有相同的键则会进行覆盖。 4.12 values和itervalues

values方法以列表的形式返回字典中的值(itervalues返回值的迭代器)。与返回列表不同的是,返回值的列表中可以包含重复的元素:

>>> d={} >>> d[1]=1 >>> d[2]=2 >>> d[3]=3 >>> d[4]=1 >>> d {1: 1, 2: 2, 3: 3, 4: 1} >>> d.values() [1, 2, 3, 1]

转载请注明原文地址: https://www.6miu.com/read-9196.html

最新回复(0)