前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python基础教程 读书笔记 第四章 字典

Python基础教程 读书笔记 第四章 字典

作者头像
统计学家
发布2019-04-10 16:51:35
4370
发布2019-04-10 16:51:35
举报

字典

4.1字典的使用

字典的必要性

>>>names=['Alice','Beth','Cecil','Dee-Dee','5551']

>>>numbers=['2333','9120','3158','0112','5551']

>>> numbers[names.index('Cecil')]

'3158'

>>> phonebook['Cecil']

Traceback (most recent call last):

File "<input>", line 1, in <module>

NameError: name 'phonebook' is not defined

4.2创建和使用字典

>>>phonebook={'Alice':'2341','Beth':'9120','Cecil':'3267'}

字典由多个键及与其对应的值构成的对组成(我们也把键/值对称为项)。

4.2.1dict函数

可以用dict函数,通过其他映射(比如其他字典)或者(键,值)这样的序列对建立字典。

>>>items=[('name','Gumby'),('age',25)]

>>> d=dict(items)

>>> d

{'age': 25, 'name': 'Gumby'}

>>> d['name']

'Gumby'

dict函数也可以通过关键字参数来创建字典

>>> d=dict(name='Gumby',age=25)

>>> d

{'age': 25, 'name': 'Gumby'}

4.2.2基本字典操作

字典的基本行为在很多方面与序列(sequence)类似:

len(d) 返回d中项(键-值对)的数量;

d[k] 返回关联到键k上的值;

d[k]=v 将值v关联到键k上;

del d[k] 删除键为k的项;

k in d 检查d中是否有含有键为k的项。

字典和列表的区别:

键类型:字典的键不一定为整型数据(但也可能是),也可能是其他不可变类型,比如浮点型(实型)、字符串或者元组。

自动添加:即使那个键起初在字典中并不存在,也可以为它分配一个值,这样字典就会建立新的项。而(在不使用append方法或者其他类似操作的情况下)不能将值关联到列表范围之外的索引上。

成员资格:表达式k in d (d为字典)查找的是键,而不是值。表达式v in l (l为列表)则用来查找值,而不是索引。

>>> x=[]

>>> x[25]='Foobar'

Traceback (most recent call last):

File "<input>", line 1, in <module>

IndexError: list assignment index out ofrange

>>> x={}

>>> x[25]='Foobar'

>>> x

{25: 'Foobar'}

实例:

people={ 'Alice':{ 'phone':'234', 'addr':'Foo drive 23' }, 'Beth':{ 'phone':'456', 'addr':'Bar street 11' }, 'Cecil':{ 'phone':'789', 'addr':'Baz avenue 99' } } labels={ 'phone':'phone number', 'addr':'address' } name=raw_input('Name:') request=raw_input('phone number(p) or address(a)?') if request=='p':key='phone' if request== 'a':key='addr' if name in people:print "%s's%s is %s,"%\ (name,labels[key],people[name][key])

结果:

Name:Alice

phone number(p) or address(a)?a

Alice'saddress is Foo drive 23,

4.2.3字典的格式化字符串

>>> phonebook

{'Beth': '9120', 'Alice': '2341', 'Cecil': '3267'}

>>> "Cecil's phonbe number is %(Cecil)s," %phonebook

"Cecil's phonbe number is 3267,"

4.2.4字典方法

1.clear

>>> d={}

>>> d['name']="tom"

>>> d['age']=15

>>> d

{'age': 15, 'name': 'tom'}

>>> returned_value=d.clear()

>>> d

{}

>>> print returned_value

None

2.copy

>>> x={'username':'admin','machines':['foo','bar','baz']}

>>> y=x.copy()

>>> y['uwsename']='mlh'

>>> y['machines'].remove('bar')

>>> y

{'username': 'admin', 'uwsename': 'mlh', 'machines': ['foo', 'baz']}

>>> x

{'username': 'admin', 'machines': ['foo', 'baz']}

当在副本中替换值的时候,原始字典不受影响,但是,如果修改了某个值(原地修改,而不是替换),原始的字典也会改变.避免这个问题的一种方法就是使用深复制(deep copy):

>>> 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']}

3.fromkeys

fromkeys方法使用给定的键建立新的字典,每个键默认对应的值为None

>>> dict.fromkeys(['name','age'])

{'age': None, 'name': None}

如果不想使用None作为默认值,也可以自己提供默认值。

>>> dict.fromkeys(['name','age'],'(unknown)')

{'age': '(unknown)', 'name': '(unknown)'}

4.get

当使用get访问一个不存在的键时,没有任何异常,而得到了None值。还可以自定义“默认”值,替换None:

接4.1例

name=raw_input('Name:')
request=raw_input('phone number) or address(a)?'  )
key=request
if request=='p':key='phone'
if request=='a':key='addr'
person=people.get(name,{})
label=labels.get(key,key)
result=person.get(key,'not avaliable')
print "%s's %s is %s,"%(name,label,result)

5.has_key

>>> d={}

>>> d.has_key('name')

False

>>> d['name']='Eric'

>>> d.has_key('name')

True

6.items和iteritems

items方法将所有的字典项以列表方式返回,这些列表项中的每一项都来自于(键,值)。但是项在返回时并没有特殊的顺序。

>>> d={'title':'python WebSite','url':'http://www.python.org','spam':0}

>>> d.items()

[('url', 'http://www.python.org'), ('spam', 0), ('title', 'python WebSite')]

7.7. keys和iterkeys

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

8. pop

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

>>> d={'x':1,'y':2}

>>> d.pop('x')

1

>>> d

{'y': 2}

9.popitem

popitem方法类似于list.pop,后者会弹出列表的最后一个元素。但不同的是,popitem弹出随机的项,因为字典并没有“最后的元素”或者其他有关顺序的概念。若想一个接一个地移除并处理项,这个方法就非常有效了(因为不用首先获取键的列表)。

10.setdefault

setdefault方法在某种程度上类似于get方法,就是能够获得与给定键相关联的值,还能在字典中不含有给定键的情况下设定相应的键值。

>>> d={}

>>> d.setdefault('name','N/A')

'N/A'

>>> d

{'name': 'N/A'}

>>> d['name']='jimmy'

>>> d.setdefault('name','N/A')

'jimmy'

>>> d

{'name': 'jimmy'}

11.update

update方法可以利用一个字典项更新另外一个字典

12. values和itervalues

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

>>> d={}

>>> d[1]=1

>>> d[2]=2

>>> d[3]=3

>>> d[4]=1

>>> d.values()

[1, 2, 3, 1]

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习与统计学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档