Python菜鸟学习第六课

1.字典的使用

2.创建字典

3.基本字典操作

4.字典的格式化字符串

5.字典方法

 

字典介绍:

字典是Python中唯一内建的映射类型,字典中的值没有特殊的顺序,但都存储在一个特定的键(Key)里。键可以是数字、字符串

甚至元组

 

1.字典的使用

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

>>>numbers=['2341','9102','3158','0142']

 

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

3158

为什么用字符不用整数表示电话号码

八进制数均以0开头

 

2.创建字典

phonebook = {'Alice':'2341','Beth':'9102','Cecil':'3258'}

注意:字典中的键是唯一的

dict函数,

通过其他映射(比如其他字典)或者(键,值)这样的序列对建立字典

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

>>>d = dict(items)

>>>d

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

>>>d['name']

'Gumby'

或者

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

>>>d

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

 

3.基本字典操作

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

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

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

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

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

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

字典和列表有一些重要区别

键类型:可能是实型、字符串、元组

自动添加

成员资格

>>>x = []

>>>x[42]='Foobar'

IndexError

>>>x={}

>>>x[42]='Foobar'

>>>x

{42:'Foobar'}

 

4.字典的格式化字符串

>>> phonebook

{'Beth':'9102','Alice':'2341','Cecil':'328'}

>>>"Cecil's phone number is %(Cecil)s." % phonebook

"Cecil's phone number  is 3258"

 

>>>template='''<html>

       <head><title>%(title)s</title></head>

       <body>

       <h1>%(title)s<h1>

        <p>%(text)s</p>

        </body>'''

>>>data = {'title':'My Home Page','text':'Welcome to my home'}

>>>print template % data

<html>

<head><titlee>My Home Page</title></head>

<body>

<h1>My Home Page</h1>

<p>Welcome to my home </p>

</body>

 

5.字典方法

1.clear方法清除字典中所有的项,原地操作,无返回值或为None

>>>d = {}

>>>d['name'] = 'Gumby'

>>>d['age']=42

>>>d

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

>>>returned_value = d.clear()

>>>d

{}

>>>print returned_value

None

为什么这个方法有用?考虑下面两种情况

>>>x={}

>>>y=x

>>>x['key'] = 'value'

>>>y

{'key':'value'}

>>>x={}

>>>y

{'key','value'}

第二种情况:

>>>x={}

>>>y=x

>>>x['key']='value'

>>>y

{'key':'value'}

>>>x.clear()

>>>y

{}

2.copy方法返回一个具有相同键-值对的新字典(这个方法实现的是浅复制,因为值本身就是相同的,而不是副本)

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

>>>y=x.copy()

>>>y['username']='mlh'

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

>>>Y

{'username':'mlh','machines':['foo','ba']}

>>>x

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

避免这个问题的一种方法是使用深复制,使用copy模块的deepcopy函数来完成

>>>from copy import deepcopy

>>>d={}

>>>d['names']=['Alfre','Bertrand']

>>>c=d.copy()

>>>dc=deepcopy(d)

>>>d['names].append('Clive')

>>>c

{'names':['Alfred','Bertrand','Clive']}

>>>dc

{'names':['Alfred','Bertrand']}

3.fromkeys方法使用给定的键建立新的字典,每个键默认的值是None

>>>{}.fromkeys(['name','age'])

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

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

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

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

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

4.get方法是个更宽松的访问字典项的方法

>>>d={}

>>>print d['name']

KeyError:

>>>print d.get('name')

None

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

'N/A'

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

>>>d.get('name')

'Eric'

5.has_key方法可以检查字典中是否含有给出的键

>>>d={}

>>>d.has_key('name')

False

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

>>>d.has_key('name')

True

6.items和iteritems

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

>>>d={'title':'Python Web Site','url':'http','spam':0}

>>>d.items()

[('url','http'),('spam',0),('title','Python Web Site')]

iteritems返回一个迭代器对象而非列表

>>>it=d.iteritems()

>>>it

<dictionary-iterator object at 169050>

>>>list(it)

[('url','http'),('spam',0),('title','Python Web Site')]

7.keys和iterkeys

keys方法将字典中的键以列表形式返回

8.pop方法用来获得对应与于给定键的值,然后将这个键-值从字典中移除

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

>>>d.pop('x')

1

>>>d

('y':2}

9.popitem弹出随机的项

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

>>>d ={}

>>>print d.setdefault('name')

None

>>>d

{'name':None}

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

12.values和itervalues

values方法以列表的形式返回字典中的值,返回值的列表中可以包含重复的元素

>>>d={}

>>>d[1]=1

>>>d[2]=2

>>>d[3]=3

>>>d[4]=1

>>>d.values()

[1,2,3,1]

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值