1.创建和使用字典
phonebook = {'Alice':'2314', 'Beth':'9102', 'Cecil':'3258'}
注意:字典中的键是唯一的,而值并不唯一
2.dict函数
可以用该函数,通过其他映射(比如其他字典)或者(键,值)对的序列建立字典,代码如下:
>>> items = [('name', 'Gumby'), ('age', 42)]
>>> d = dict(items)
>>> d
{'age': 42, 'name': 'Gumby'}
>>> d['name']
'Gumby'
>>> d['age']
42
dict函数也可以通过关键字参数来创建字典,如下例所示:
>>> d = dict(name='Gumby',age=42)
>>> d
{'age': 42, 'name': 'Gumby'}
>>>
3.字典的基本操作
字典的基本行为在很多方面与序列(sequence)雷类似
len(d)返回d中项(键值对)的数量
d[k]返回关联到键k上的值
d[k]=v将值v关联到键k上
del d[k]删除键为k的项
k in d检查d中是否有含有键为k的项
尽管字典和序列有很多特性相同,单页有一下一些重要的区别
键类型:字典的键不一定为整形数据,键可以是任意的不可变类型,比如:浮点型,字符串,或元组
自动添加:即使键期初在字典中并不存在,也可以为他赋值,这样子字典就会建立新的项,而不能讲值关联到列表范围之外的索引上,
成员资格:表达式 k in d(d为字典)查找的是键,而不是值,表达式v in 1 (1为列表)则用来查找值,而不是索引,这样看起来好像有些不太一致,但是习惯以后就会感觉非常自然了。毕竟,如果字典含有指定的键,查找相应的值也就很容易了
字典示例1:
#一个简单的数据库
#字典使用个人名作为键,每个人用另一个字典来表示,其键‘phone’和‘addr’分别表示他们的电话和地址,代码如下:
people = {
'Alice':{
'phone':'2341',
'addr':'Foo drive 23'}
}
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])
4.字典的格式化字符串
>>> phonebook = {'Alice':'2314', 'Beth':'9102', 'Cecil':'3258'}
>>> phonebook
{'Beth': '9102', 'Alice': '2314', 'Cecil': '3258'}
>>> "Cecil's phone number is %(Cecil)s." % phonebook
"Cecil's phone number is 3258."
5.字典方法
1.clear方法
该方法清楚字典中所有的。这是个原地操作,所以无返回值,
>>> d = {}
>>> d['name'] = 'Gumby'
>>> d['age'] = '56'
>>> d
{'age': '56', 'name': 'Gumby'}
>>> d.clear()
>>> d
{}
2.copy方法
该方法返回一个具有相同键值对的新字典(这个方法实现的是浅赋值,因为值本身就是相同的,而不是副本)
#使用copy方法进行浅复制
x = {'username': 'admin', 'machines': ['foo', 'bar', 'baz']}
y = x.copy()
y['username'] = 'mlh'
y['machines'].remove('bar')
print y
print x
3.fromkeys方法
该方法使用给定的键建立新的字典,每个键都对应一个默认值None。
>>> dict.fromkeys(['gender', 'age'])
{'gender': None, 'age': None}
如果不想使用None作为默认值,也可以自己提供默认值,代码如下:
>>> dict.fromkeys(['gender', 'age'], '(unknown)')
{'gender': '(unknown)', 'age': '(unknown)'}
4.get方法
该方法是一个更宽松的访问字典项的方法,一般来说,如果试图访问字典中不存在的项时会出错,二用get就不会,示例如下:
>>> d = {}
>>> print d['name']
Traceback (most recent call last):
File "<pyshell#125>", line 1, in <module>
print d['name']
KeyError: 'name'
>>> print d.get('name')
None
5.has_key方法
该方法可以检查字典中是否含有特定的键,表达式d.has_key(k)相当于表达式k in d。
>>> d = {}
>>> d.has_key('name')
False
>>> d['name'] = 'lisi'
>>> d.has_key('name')
True
6.items 和iteritems
items方法将字典所有的项以列表方式返回,列表中的每一项都表示为(键、值)对的形式。但是项在返回时并没有遵循特定的次序,
>>> d = {'title': 'Python web site', 'url': 'http://www.baidu.com', 'spam': 0}
>>> d.items()
[('url', 'http://www.baidu.com'), ('spam', 0), ('title', 'Python web site')]
iteritems方法的作用大致相同
>>> d.iteritems()
<dictionary-itemiterator object at 0x0000000002E6C458>
>>> list(d.iteritems())
[('url', 'http://www.baidu.com'), ('spam', 0), ('title', 'Python web site')]
>>>
很多情况下使用iteritems会更搞笑,,尤其是想要迭代结果的情况下,光宇迭代器的更多信息,请参见第九章
7.keys和iterkeys
keys方法将字典中的键以列表形式返回,而iterkeys则返回针对键的迭代器
8.pop方法
pop方法用来过的对应于给定的键的值,然后这个键值对从这个字典中移除,
>>> d = {'x':1, 'y': 2}
>>> d.pop('x')
1
>>> d
{'y': 2}
>>>
9.popitem方法
该方法弹出一个随机项,
>>> d = {'title': 'Python web site', 'url': 'http://www.baidu.com', 'spam': 0}
>>> d.popitem()
('url', 'http://www.baidu.com')
>>> d
{'spam': 0, 'title': 'Python web site'}
10.setdefault方法
该方法在某种程度上类似于get方法,能够过的与给定的键值相关联的值,除此之外,setdefault还能在字典中不含有给定键的情况下设定相应的值
>>> d = {}
>>> d.setdefault('name', 'n/a')
'n/a'
>>> d
{'name': 'n/a'}
>>> d['name'] = 'Gumby'
>>> d.setdefault('name', 'n/a')
'Gumby'
>>>
11.update方法
该方法可以利用一个字典更新另外一个字典
>>> d = {'title': 'Python web Site', 'url': 'www.baidu.com', 'changed': 'mar'}
>>> x = {'title': 'Python Language Website'}
>>> d.update(x)
>>> d
{'url': 'www.baidu.com', 'changed': 'mar', 'title': 'Python Language Website'}
12.values 和itervalues
values方法一列表的形式放回字典中的值(itervalues返回值的迭代器)。
>>> d = {}
>>> d[1]=1
>>> d[2]=2
>>> d[3]=3
>>> d.values()
[1, 2, 3]