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]