您的位置:首页 > 编程语言 > Python开发

python学习手册:字典,方法

2015-10-27 16:41 513 查看

字典方法:

1.clear:清空字典中所有的项,无返回值,是将整个字典都清空了

>>> d={}

>>> d['name']='Alice'

>>> d['age']=21

>>> d

{'age': 21, 'name': 'Alice'}

>>> returned_value=d.clear()

>>> d

{}

>>> print returned_value

None

下面看一下clear方法的功效,用两个例子来说明一下

示例一:没有使用clear的时候,将字典赋空

>>> x={}

>>> y=x

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

>>> y

{'key': 'value'}

>>> x={}

>>> y

{'key': 'value'}

当将x赋空时,y并没有也相同的赋空了

示例二:当使用clear方法时

>>> x={}

>>> y

{'key': 'value'}

>>> x={}

>>> y=x

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

>>> x.clear()

>>> y

{}

以上两个示例中,虽然都是指向同一个字典,在示例一中,将x关联到一个新的字典来清空是,对y没有影响,但用clear方法时,清空了原始字典中所有的元素,那么y也被清空了

2.copy方法:返回一个具有相同键—值对的新字典,这个方法的是浅复制(shallow 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']}

>>> 

在上例中,在副本中替换值的时候,原字典不受影响,但是,如果如果原地修改某个值,那原始的字典也会修改,因为同样的值也存储在原字典中

避免这个问题的一种方法就是使用深复制(deep copy),复制其包含的所有的值,可以使用copy模块的deepcopy函数来完成操作:

>>> d={}

>>>d['name']=['Alfred','Bertrand']

>>> c=d.copy()

>>> dc=deepcopy(d)

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

>>> c

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

>>> dc

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

3.fromkeys:使用给定的键建立新的字典,每个键默认对应的值为none

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

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

首先创建了一个空字典,然后调用它的fromkeys方法,建立一个新的字典,有点空余,现在直接在所有字典的类型dict上调用方法

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

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

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

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

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

4.get方法:get是个更宽松的访问字典项的方法,一般来说,如果试图访问字典中不存在的项时会出错:

d={}

>>> print d['name']

 

Traceback (most recent call last):

 File "<pyshell#48>", line 1, in <module>

   print d['name']

KeyError: 'name'

但是使用get方法就不会出错

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

None

若键存在,get用起来就像普通的字典查询一样

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

>>> d.get('name')

'Eric'

 

字典方法示例

#使用get()的简单数据库

people={'xiaoming':{'phone':'123','addr':'beijing'},

       'laowang':{'phone':'234','addr':'sahnghai'},

       'Jeson':{'phone':'345','addr':'shenzheng'}}

#这里添加代码清淡4-1中插入数据库的代码

labels={'phone':'phonenumber','addr':'address'}

name=raw_input('Name:')

#查找电话号码还是地址?

request=raw_input('phone number (p) oraddress (a)?')

#使用正确的键:

key=request #如果请求既不是‘p’也不是‘a’

if request=='p':key='phone'

if request=='a':key='addr'

#使用get()提供默认值:

person=people.get(name,{})

label=labels.get(key,key)

result=person.get(key,'not aviable')

print "%s's %s is %s." %(name,label,result)

5.has_key:此方法可以检查字典中是否含有给出的键,表达式d.has_key(k)相当于表达式k in  d,也就是True与False来表示

>>> 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 web site')]

Iteritems方法的作用大致相同,但是会返回一个迭代器对象而不是列表:

it=d.iteritems()

>>> it

<dictionary-itemiterator object at0x02A38420>

很多情况下使用iteritems更高效

7.keys与iterkeys,keys是将字典中的键以列表的形式返回,二iterkeys则返回针对键的迭代器

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

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

>>> d.pop('x')

1

>>> d

{'y': 2}

9.popitem方法:类似于list,pop,后者会弹出列表的最后一个元素,但不同的是popitem弹出的是随机的项,若想一个一个的移除,这个方法就好了,因为不用首选获取键的列表

虽然popitem方法和列表的pop方法很类似,但是字典中没有与append等价的方法,因为字典是无序的,

10.setdefault:类似于get方法,就是能够获得与给定键相关的值,同时,setdefault还能在字典中不含有给定键的情况下设定相应的键值

11.update方法:可以利用一个字典更新另一个字典,就是在一个字典的后面加上另一个字典

>> d={'title':'python website','url':'http://www.python.org','changed':'Oct 27 16:33 MET 2008'}

>>> x={'title':'python languagewebsite'}

>>> d.update(x)

>>> d

{'url': 'http://www.python.org', 'changed':'Oct 27 16:33 MET 2008', 'title': 'python language website'}

Uodate方法可以与dict函数(或者类型构造函数)同样的方式进行调用

12.values和itervalues

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

>>> d={}

>>> d[1]=1

>>> d[2]=2

>>> d[3]=3

>>> d[4]=1

>>> d.values()

[1, 2, 3, 1]

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: