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

字典,是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']

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值