python字典学习

发布时间:2017-09-05 11:30:20
python字典学习 1、字典的使用

某些情况下,字典比列表更加适用,比如:

表征游戏棋盘的状态,每个键都是由坐标值组成的元组;

存储文件修改次数,用文件名作为键;

数字电话/地址簿。

假如有一个人名列表如下:

>>> names = ['Alice','Beth','Cecil','Dee','Earl']

一个电话号码的列表如下:

>>> numbers = ['2341','9102','3158','0142','5551']

建立了这些列表后,可以通过如下方式查找Cecil的电话号码:

>>> numbers[names.index('Cecil')]

'3158'

这样虽然可以,担并不实用。

2、创建和使用字典

字典可以通过下面的方式创建

phonebook = {'Alice':"2341','Beth':'9102','Cecil':'3258'}

字典由多个键及与其对应的值构成的对组成(我们把键/值对称为项)

在上例中,名字是键,电话号码是值。

空字典由两个大括号组成,像这样:{}

3、dict函数

可以用dict函数,通过其他映射(比如其他字典)或者(键,值)这样的序列对建立字典。

>>> items = [('name','Gumby'),('age',42)]

>>> d = dict(items)

>>> d

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

dict函数也可以通过关键字参数来创建字典,如下例所示:

>>> d = dict(name='Gumby',age=42)

>>> d

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

4、基本字典操作

字典的基本行为在很多方面与序列类似:

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

d[k]返回关联到键k上的值;

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

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

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

5、字典的格式化字符串

>>> phonebook

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

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

"Ceil's phone number is 3258."

除了增加的字符串键之外,转换说明符还是像以前一样工作。

6、字典方法

(1)clear

clear方法清除字典中所有的项。

第一种情况:

>>> x = {}

>>> y=x

>>> x['key'] = 'value'

>>> y

{'key': 'value'}

>>> x = {}

>>> y

{'key': 'value'}

第二种情况:

>>> x = {}

>>> y=x

>>> x['key'] = 'value'

>>> y

{'key': 'value'}

>>> x.clear()

>>> y

{}

两种情况中,x和y最初对应同一个字典,情况一中,通过将x关联到一个新的空字典对y一点影响也没有,y还关联到原来的字典,如果想清空原始字典中所有的元素,,必须使用clear方法。

(2)copy

copy方法返回一个具有相同键-值对的新字典(这个方法实现的是浅复制,因为值本身就是相同的,而不是副本)

>>> x = {'username' : 'admin','machines' : ['foo','bar','baz']}

>>> y=x.copy()

>>> y

{'username': 'admin', 'machines': ['foo', 'bar', 'baz']}

>>> y['username']='mlh'

>>> y['machines'].remove('bar')

>>> y

{'username': 'mlh', 'machines': ['foo', 'baz']}

>>> x

{'username': 'admin', 'machines': ['foo', 'baz']}

当在副本中替换值的时候,原始字典不受影响,但是如果修改了某个值(原地修改,而不是替换),原始的字典也会改变,因为同样的值也存储在原字典中。

避免这个问题的一种方法是使用深复制

>>> from copy import deepcopy

>>> d = {}

>>> d['names'] = ['qiqi','qiqijianglu']

>>> c =d.copy()

>>> dc = deepcopy(d)

>>> d['names'].append('cccc')

>>> c

{'names': ['qiqi', 'qiqijianglu', 'cccc']}

>>> dc

{'names': ['qiqi', 'qiqijianglu']}

(3)fromkeys

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

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

{'age': None, 'name': None}

>>> dict.fromkeys(['name','age'])

{'age': None, 'name': None}

也可以自己提供默认值

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

{'age': 'unknown', 'name': 'unknown'}

(4)get

get访问一个不存在的键时不会出现异常,而会得到None值

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

None

还可以自己定义默认值替换None

(5)has_key可以检查字典中是否含有给出的键

>>> d={}

>>> d

{}

>>> d.has_key('name')

False

>>> d['name']='qiqi'

>>> d.has_key('name')

True

(6)items和iteritems

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

>>> d = {'qiqi':111,'alice':222}

>>> d.items()

[('qiqi', 111), ('alice', 222)]

iteritems方法的作用大致相同,返回的是一个迭代器对象而不是列表

>>> it = d.iteritems()

>>> it

<dictionary-itemiterator object at 0x1fe81b0>

>>> list(it)

[('qiqi', 111), ('alice', 222)]

(7)keys和iterkeys

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

(8)pop

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

(9)popitem

弹出列表中的最后一个元素,popitem弹出的是随机的项,因为字典没有顺序的概念

(10)setdefault

setdefault方法类似于get,就是能获得与给定键相关联的值,此外,还能在字典中不含有给定键的情况下设定相应的键值。

>>> d={}

>>> print d.setdefault('name','qiqi')

qiqi

>>> d

{'name': 'qiqi'}

(11)update

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

(12)values和itervalue

values方法以列表的形式返回字典中的值

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:孝感SEO http://xiaogan.4567w.com