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]