字典

映射:

映射可以使用任意不可变对象标识元素。最常用的类型是字符串和元组。Python唯一内建的映射类型是字典。

利用字典格式化字符串:

可以通过在格式化说明符中包括名称(键)来对字典应用字符串格式化操作。当在字符格式化使用元组时,还需要对元组中每个元素都设定’格式化说明符“,在使用字典时,所用说明符可以比字典中用到的项少。

字典方法:

字典方法有很多方法,调用的方式和调用列表以及字符串的方式相同。

1.创建和使用字典

可以通过某一特定的词语(键),从而找到他的定义(值)。

>>> phonebook={'Joe':'123','Amy':'234','Kitty':'345'}
>>> phonebook['Joe']
'123'

字典就像Python中列表一样

>>> names = ['Joe','Amy','Kitty']
>>> numbers=['123','234','345']
>>> numbers[names.index('Joe')]
'123'

字典由多个键及与其对应的值构成的键-值对组成(我们也把键-值对称为项)。例子中,名字是键,号码是值。键和值之间用冒号(:)隔开,项之间用逗号隔开(,),而整个字典是由一对大括号括起来。空字典不包括任何项:{}。

(1)dict函数

dict函数不是真正函数,它与list,tuple,str一样,是个类型。
dict函数通过其他映射(比如其他字典)或者(键,值)对的序列建立字典

>>> phonebook=[('Joe','123'),('Amy','234'),('Kitty','345')]
>>> numbers=dict(phonebook)
>>> numbers
{'Joe': '123', 'Amy': '234', 'Kitty': '345'}
>>> numbers['Joe']
'123'

dict函数也可以通过关键字参数来创建字典

>>> d=dict(name='Joe',age=12)
>>> d
{'name': 'Joe', 'age': 12}

(2)基本字典操作

len(d)返回d中项(键-值对)的数量;
d[k]返回关联到键k上的值;
d[k]=v将值v关联到键k上;
del d[k]删除键的项;
k in d检查d中是否有含有键为k项

键类型:

字典的键并不一定为整型数据,j键可以是任意的不可变类型,比如浮点型(实型)、字符串或者元组。

自动添加:

即使键起初在字典中并不存在,也可以为它赋值,这样字典就会建立新的项。而(在不使用append方法或者其他类似操作的情况下)不能将值关联到列表范围之外的索引上。

成员资格:

表达式 k in d (d为字典)查找的是键,而不是值。表达式 v in l(l为列表)则用来查找值,而不是索引。在字典中检查键的成员资格比在列表中检查值的成员资格更高效。

>>> a={}
>>> a[10]='Ten'
>>> a
{10: 'Ten'}

字典格式化字符串

在每个转换说明符中的%字符后面,可以加上键(用圆括号括起来的),后面再跟上其他说明元素

>>> phonebook={'Joe':'123','Amy':'234','Kitty':'345'}
>>> "Joe's phone number is %(Joe)s."%phonebook
"Joe's phone number is 123."

字典方法

1.clear

clear方法清除字典中所有项。这是个原地操作(类似于list.sort),所以无返回值(或者说返回None)。

>>> d={}
>>> d['name']='Amy'
>>> d['age']='11'
>>> d
{'name': 'Amy', 'age': '11'}
>>> d.clear()
>>> d
{}

看看下面这两种情况,x和y最初对应同一个字典,通过将x关联到一个新的空字典,对y并没有任何影响,y还是关联原先的字典。

>>> x={}
>>> y=x
>>> x['key']='value'
>>> y
{'key': 'value'}
>>> x={}
>>> y
{'key': 'value'}

如果使用clear方法,会清空原始字典所有元素,y随后也被清空。

>>> x={}
>>> y=x
>>> x['key']='value'
>>> y
{'key': 'value'}
>>> x.clear()
>>> x
{}
>>> y
{}

2.copy

这个方法实现的是浅复制,因为值本身是相同的,而不是副本

>>> x={'username':'name','star':['a','b','c']}
>>> y=x
>>> y['username']='Amy'
>>> y['star'].remove('c')
>>> y
{'username': 'Amy', 'star': ['a', 'b']}
>>> x
{'username': 'Amy', 'star': ['a', 'b']}
>>> x={'username':'name','star':['a','b','c']}
>>> y=x.copy()
>>> y['username']='Amy'
>>> y
{'username': 'Amy', 'star': ['a', 'b', 'c']}
>>> x
{'username': 'name', 'star': ['a', 'b', 'c']}
>>> y['star'].remove('c')
>>> y
{'username': 'Amy', 'star': ['a', 'b']}
>>> x
{'username': 'name', 'star': ['a', 'b']}

可以看到,当在副本中替换值的时候,原始字典不受影响。但如果修改某个值(原地修改,而不是替换),原始的字典也会改变,因为同样的值也存储在原字典中。
避免这个问题的一种方法是使用深复制(deep copy),复制其包含的所有值。可以使用copy模块的deepcopy函数来完成操作

>>> from copy import deepcopy
>>> d={}
>>> d['names']=['Joe','Amy']
>>> c=d.copy()
>>> dc=deepcopy(d)
>>> d['names'].append('Kitty')
>>> c
{'names': ['Joe', 'Amy', 'Kitty']}
>>> dc
{'names': ['Joe', 'Amy']}

3.fromkeys

fromkeys方法使用给定的键建立新字典,每个键对应一个默认的值None.
先构造一个空字典,再调用它的fromkeys方法,建立另外一个字典(有些多余)

>>> {}.fromkeys(['name','age'])
{'name': None, 'age': None}

还可以直接在dict上面调用该方法,因为dict是所有字典的类型

>>> dict.fromkeys(['name','age'])
{'name': None, 'age': None}

不想用None作为默认值,可以自己提供默认值

>>> dict.fromkeys(['name','age'],'(unknown)')
{'name': '(unknown)', 'age': '(unknown)'}

4.get

get方法是个更宽松的访问字典项的方法,一般在访问字典中不存在的项时,会出错,而get方法在访问字典中不存在的项时,不会出错,会返回None

>>> d={'name':'Amy'}
>>> d.get('name')
'Amy'

5.has_key

has_key方法可以检查字典中是否含有特定的键。表达式d.has_key(k)相当于表达式 k in d.
Python 3.0不包括这个函数。

>>> d={}
>>> d.has_key('name')
Traceback (most recent call last):
  File "<pyshell#107>", line 1, in <module>
    d.has_key('name')
AttributeError: 'dict' object has no attribute 'has_key'
>>> 'name' in d
False

6.items和iteritems

items方法将字典所有的项以列表达式返回,列表中每一项都表示为(键,值)对形式,但是项返回时并没有遵循特定的次序。

>>> d={'Joe':'123','Amy':'234','Kitty':'345'}
>>> d.items()
dict_items([('Joe', '123'), ('Amy', '234'), ('Kitty', '345')])

7.keys和iterkeys

keys方法将字典中的键以列表形式返回,而iterkeys则返回针对键的迭代器

>>> d={'Joe':'123','Amy':'234','Kitty':'345'}
>>> d.keys()
dict_keys(['Joe', 'Amy', 'Kitty'])

8pop

pop方法用来获得对应于给定键的值,然后将这个键-值对从字典中移除

>>> d={'Joe':'123','Amy':'234','Kitty':'345'}
>>> d.pop('Joe')
'123'
>>> d
{'Amy': '234', 'Kitty': '345'}

9.popitem

popitem方法类似于list.pop

>>> d={'Joe':'123','Amy':'234','Kitty':'345'}
>>> d.popitem()
('Kitty', '345')
>>> d
{'Joe': '123', 'Amy': '234'}
>>> d.popitem()
('Amy', '234')
>>> d
{'Joe': '123'}
>>> d.popitem()
('Joe', '123')
>>> d
{}

10.setdefault

setdefault方法在某种程度上类似于get方法,能够获得与给定的键相关联的值,除此之外,setdefault方法还能在字典中不含有给定键的情况下设定相应的键值。当键不存在时,setdefault返回默认值并且相应的更新字典。如果键存在,则返回对应的值,当不改变字典。默认值可选,与get一样,如果不设定,默认值会返回None.

>>> d={}
>>> d.setdefault('name','none')
'none'
>>> d
{'name': 'none'}
>>> d['name']='Joe'
>>> d
{'name': 'Joe'}
>>> d.setdefault('name','none')
'Joe'

11.update

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

>>> d={'Joe':'123','Amy':'234','Kitty':'345'}
>>> x={'Joe':'000'}
>>> d.update(x)
>>> d
{'Joe': '000', 'Amy': '234', 'Kitty': '345'}
>>> y={'Anny':'111'}
>>> d.update(y)
>>> d
{'Joe': '000', 'Amy': '234', 'Kitty': '345', 'Anny': '111'}

update方法可以与调用dict函数(或者同类型构造函数)同样的方式进行调用。这意味着update可以和映射、拥有(键,值)对的队列以及关键字参数一起调用。

12.values和itervalues

values方法以列表形式返回字典中的值,但是可以包含重复的元素

>>> d={}
>>> d[1]=1
>>> d[2]=2
>>> d[3]=1
>>> d.values()
dict_values([1, 2, 1])
>>> d
{1: 1, 2: 2, 3: 1}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值