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

Python 第四章 字典:当索引不好用时

2015-01-12 21:18 281 查看
字典,是Python中唯一内建的映射数据结构类型。

这里的映射是指通过名字引用值。

字典中的值并没有特殊的顺序,值都是存储在一个特定的键里。

键可以是数字、字符串甚至是元祖。

什么是键,什么是值,怎么映射呢? 请继续看下去。

创建和使用字典:

下面来创建一个小型的数据库,来记录名字和电话号码

>>> phonebool = {'Alice':'2341', 'Beth':'9102', 'Cecil':'3258', 'Louis':'1212'}

名字是键,电话号码是值。键和值通过符号:来对应,形成映射关系。

我们把一对键值称为项。

字典就是有这用多个键值形成的项组成。

字典中的键是唯一的,即同一字典中不会出现两个相同的键。字典中值不唯一。

空字典有两个大括号组成,即{}。

除了用{}直接创建字典外,还可以用函数dict()来创建映射。通过(键,值)这样的序列对来建立字典。

>>> item = [('name', 'Cumby'), ('age', '42')]

>>> d = dict(item)

>>> d

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

>>>

字典的基本操作:

len(d)返回d中项的数量

d[k]返回键为K对应的项

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

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

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

字典和列表有很多特性相同,但也有以下一些重要的区别:

字典的键类型不一定为整型数据,可以是其他不可变类型(浮点,字符串,元组)

字典可以直接添加新的项,而列表需要使用append方法。

k in d (d为字典)查找的是键,而不是值。v in l (l为列表)查找的是值,不是索引。

字典数据库:

people = {

'Alice':{

'Phone':'2341',

'addr':'Foo street'

},

'Louis':{

'Phone':'1111',

'addr':'eeee'

}

}

字典格式化字符串:

>>> phonebool = {'Alice':'2341', 'Beth':'9102', 'Cecil':'3258', 'Louis':'1212'}

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

"Cecil's phone number is 3258."

字典方法:

1. clear

clear方法清除字典中所有的项。原地操作,无返回值。

>>> d = {}

>>> d['name'] = 'louis'

>>> d['age'] = '26'

>>> d

{'age': '26', 'name': 'louis'}

>>> returned_value = d.clear()

>>> d

{}

>>> print returned_value

None

2. copy

copy方法返回一个具有相同键-值对的新字典。浅复制。

还有一个深复制 from copy import deepcopy

3. fromkeys

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

4. get

get方法能访问字典的项

>>> d = {}

>>> print d['name']

Traceback (most recent call last):

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

print d['name']

KeyError: 'name'

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

None

当使用get访问一个不存在的键时,没有异常,返回None.

也可以之定义一个字符串,代替访问一个存在的键返回的None.

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

'N/A'

5. has_key

has_key方法可以检查字典中是否含有给定的键。

含有,则返回Ture

否则,返回False

6. items和iteritems

items方法将所有的字典项以列表方式返回。

>>> phonebool = {'Alice':'2341', 'Beth':'9102', 'Cecil':'3258', 'Louis':'1212'}

>>> phonebool.items()

[('Louis', '1212'), ('Beth', '9102'), ('Alice', '2341'), ('Cecil', '3258')]

7. keys和iterkeys

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

iterkeys方法返回针对键的迭代器

>>> phonebool = {'Alice':'2341', 'Beth':'9102', 'Cecil':'3258', 'Louis':'1212'}

>>> phonebool.keys()

['Louis', 'Beth', 'Alice', 'Cecil']

>>> it = phonebool.iterkeys()

>>> list(it)

['Louis', 'Beth', 'Alice', 'Cecil']

>>>

8.pop和popitem

pop方法用来弹出给定键的值,并且将这个键值从字典中删除。

>>> phonebool = {'Alice':'2341', 'Beth':'9102', 'Cecil':'3258', 'Louis':'1212'}

>>> phonebool.pop('Louis')

'1212'

>>> phonebool

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

9. setdefault

setdefault方法在某种程度上类似于get方法,能获得给定键所对应的值,它还能在字典中不含有给定键的情况下设定相应的键值。

>>> d={}

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

'N/A'

>>> d

{'name': 'N/A'}

>>> d['name'] = 'louis'

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

'louis'

>>> d

{'name': 'louis'}

>>>

当键不存在的时候,setdefault返回默认值并且相应地更新字典。(默认值是可以自己设置的,和get同理)

如果键存在,那么就返回与其对应的值,但不改变字典。

10. update

update方法可以利用一个字典项更新另外一个字典。

>>> phonebool = {'Alice':'2341', 'Beth':'9102', 'Cecil':'3258', 'Louis':'1212'}

>>> x={'Louis':'1231'}

>>> phonebool.update(x)

>>> phonebool

{'Louis': '1231', 'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}

11. values和itervalues

values方法以列表的形式返回字典中的值(itervalues返回值是迭代器)。

>>> phonebool.values()

['1231', '9102', '2341', '3258']
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: