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方法以列表的形式返回字典中的

你可能感兴趣的:(python字典学习)