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

字典

字典是Python中的唯一内建的映射类型。字典中的的值没有特殊的顺序(字典是无序的),但都是存储在一个特定的键下,键可以是数字,字符串,甚至是元组

4.1字典色使用

字典由多个键及与其对应的值够成的键-值对组成(键值对也可称为项),每个键和它的值之间用冒号(:)隔开,项之间用逗号(,)隔开,而整个字典是由一对大括号括起来。空字典由两个大括号组成,像这样:{}

注意:字典中的键是惟一的,而值并不唯一

4.2创建和使用字典

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

4.2.1 dict()函数

可以用dict()函数,通过其他映射(比如其他字典)或者(键,值)对的序列建立字典。也就是说dict()函数可以创建字典
>>> items = [("name","Gumby"),("age","42")]
>>> d=dict(items)
>>> d
{'age': '42', 'name': 'Gumby'}
>>> 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.2.1字典的基本操作

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

字典的特性

键类型 :键可以是任意不可变类型
自动添加 :即使键起初在字典中并不存在,也可以为它赋值,这样字典就会建立新的项。
成员资格 :表达式 k in d 查找的是键,而不是值。

4.2.3字典的格式化字符串
4.2.4字典方法

1、clear():clear方法清除字典中的所有项,无返回值

>>> d={}
>>> d["name"] = "Gumby"
>>> d["age"] = 42
>>> d
{'age': 42, 'name': 'Gumby'}
>>> returned_value=d.clear()
>>> d
{}
>>> print returned_value
None
>>> 
补充:观察如下两种情况
情况1
>>> y=x
>>> x={}
>>> y=x
>>> x["key"] = "value"
>>> y
{'key': 'value'}
>>> x
{'key': 'value'}
>>> x={}
>>> y
{'key': 'value'}
>>> x
{}
>>> 
情况2>>> x={}
>>> y=x
>>> x["key"] = "value"
>>> y
{'key': 'value'}
>>> x
{'key': 'value'}
>>> x.clear()
>>> y
{}
>>> x
{}
>>> 
总结:两种情况中,x和y最初对应同一个字典,情况一中,通过将x关联到一个新的空字典来清空它,这对于y一点影响也没有,它还关联到原先的字典。但是如果想清空原始字典中的所有元素,必须使用clear方法。

2、copy():返回一个 具有相同键值对的新字典 (浅复制)

>>> x = {'username':'admin','machines':['foo','bar','baz']}
>>> y=x.copy()
>>> y["username"]='mlh'
>>> y['machines'].remove('bar')
>>> y
{'username': 'mlh', 'machines': ['foo', 'baz']}
>>> x
{'username': 'admin', 'machines': ['foo', 'baz']}
>>> 
分析:浅复制存在一些问题
1、当在副本y中替换值的时候,原始字典不受影响
2、如果过在副本y中修改了某个值,原始的字典也会改变,

补充:深复制

copy模块的deepcopy函数
>>> d = {}
>>> d["names"] = ["Alfred","Bertrand"]
>>> c=d.copy()
>>> dc=deepcopy(d)
>>> d['names'].append("Clive")
>>> c
{'names': ['Alfred', 'Bertrand', 'Clive']}
>>> dc
{'names': ['Alfred', 'Bertrand']}
>>> d
{'names': ['Alfred', 'Bertrand', 'Clive']}
>>> 

3、fromkeys():使用给定的键建立新的字典,每个键都对应一个默认的值None

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

#直接在dict上面掉用该方法来建立新字典
>>> dict.fromkeys(['name','age'])
{'age': None, 'name': None}

#可以自己提供默认值
>>> dict.fromkeys(['name','age'],'(unknown)')
{'age': '(unknown)', 'name': '(unknown)'}
>>> 

4、get():更宽松的访问字典的方法,如果试图访问的字典中的项不存在时不会出错,取而代之的是得到None,也可以自定义默认值,替换None

>>> d={}
>>> print d.get("name")
None
>>> print d.get("age",'0')
0

5、has_key():检查字典是否含有特定的“键”。Python3.0中没有这个函数

>>> d={}
>>> d.has_key('name')
False
>>> d['name']='Eric'
>>> d.has_key('name')
True
>>> 

6、items和iteritems

 items将字典所有的项以列表的方式返回,项在返回时没有特定的次序
>>> d={'title':'Python Web Site','url':'http://www.python.org','span':0}
>>> d.items()
[('url', 'http://www.python.org'), ('span', 0), ('title', 'Python Web Site')]
>>> 
iteritems()返回一个迭代器对象,而不是列表。在很多情况下效率更高
>>> it = d.iteritems()
>>> it
<dictionary-itemiterator object at 0x7f737139ef18>
>>> list(it)
[('url', 'http://www.python.org'), ('span', 0), ('title', 'Python Web Site')]
>>> 

7、keys和iterkeys,values和itervalues

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

8、pop方法

pop方法用来获得对于给定的键的值,然后将这个键值对从字典中移除。   
>>> d = {'x':1,'y':2} 
>>> d.pop('x')
1
>>> d
{'y': 2}

9、popitem

popitem方法从字典中弹出随机的项。
>>> d={'title':'Python Web Site','url':'http://www.python.org','span':0}
>>> d
{'url': 'http://www.python.org', 'span': 0, 'title': 'Python Web Site'}
>>> d.popitem()
('url', 'http://www.python.org')
>>> d
{'span': 0, 'title': 'Python Web Site'}
>>> 

10、setdefault()

类似于 get方法,能够获得与给定键相关联的值,除此之外,setdefault()还能在字典中不含有给定键的情况下设定相应的键值。(当键在字典中不存在时,setdefault返回默认的值并且相应的更新字典。如果键存在,那么就返回与其对应的值,但不改变字典,默认值时可选的,如果不设定,会默认使用None)
>>> d = {}
>>> print d.setdefault('name')
None
>>> d
{'name': None}
>>> print d.setdefault('age',0)
0
>>> d
{'age': 0, 'name': None}
>>> 

11、update()

可以利用一个字典项更新另外一个字典:
>>> d = {'title':'Python Web Site',"url":"http://www.python.org","changed":"Mar 14 22:09:15 MET 2008"}
>>> x = {'title':'Python Language Web Site'}
>>> y = {'Date':'2018 01 21'}
>>> d.update(x)
>>> print d
{'url': 'http://www.python.org', 'changed': 'Mar 14 22:09:15 MET 2008', 'title': 'Python Language Web Site'}
>>> d.update(y)
>>> d.items()
[('url', 'http://www.python.org'), ('Date', '2018 01 21'), ('changed', 'Mar 14 22:09:15 MET 2008'), ('title', 'Python Language Web Site')]
>>> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值