1.字典的使用
字典是Python中唯一内建的映射类型。字典中的值没有特殊的顺序,但是都存储在一个特定的键(key)下。键可以是数字、字符串甚至是元组。
1.1字典的使用
字典中的键是唯一的(其他类型的映射也是如此),而值并不唯一
可以用dict函数来创建字典
items = {('name','zhao'),('age',42)}
d = dict(items)
print (d)
{'age': 42, 'name': 'zhao'}#字典里的存储是没有顺序的
dict也可以通过关键字参数来创建字典
dd = dict(name='zhao',age=42)
dd
{'age': 42, 'name': 'zhao'}#dict函数根本不是真正的函数,它是个类型,就像list、tuple和str一样
1.2字典的基本操作
字典的基本行为在很多方面与序列相似
键类型:字典的键可以是任意的不可变类型,比如浮点型、字符串和元组
自动添加:及时键起初在字典中并不存在,也可以为他赋值,这样字典就会建立新的项。
成员资格:表达式k in d(字典)查找的是键,而不是值。表达式v in l(列表)查找值,而不是索引
字典的格式化字符串
title = "world"
year = 2013
print ("hello %(titles)s, %(years)10d" % {"titles":title, "years":year})
hello world, 2013
就像其他内建类型一眼个,字典也有方法。
-clear
清除字典中的所有的项。这是个原地操作(类似list.sort),所以无返回值(或者说返回None)
x = {}
y = x
x['key'] = 'value'
print (y)
x = {}
print (y)
{'key': 'value'} {'key': 'value'}
x = {}
y = x
x['key'] = 'value'
print (y)
x.clear()
print (y)
{'key': 'value'} {}两种情况中,x和y最初对应同一个字典。在第一种里,将x关联到一个新的空字典来清空x,对y一点影响都没有。而在第二种中,使用clear可以将x和y都清空
-copy
d = {'name':'zhao','age':[42,'man']}
c = d.copy()
c['name'] = 'qian'
c['age'].remove('man')
print (c)
print (d)
{'name': 'qian', 'age': [42]} {'name': 'zhao', 'age': [42]}可以看到,当在副本中替换值得时候,原始字典不受影响,但是修改了某个值,原字典也会改变(浅复制)
避免这一问题可以使用deepcopy(from copy import deepcopy)
-fromkeys
此方法使用给定的键建立新的字典,每个键对应一个默认的值None,当然也可以自己提供默认值
{}.fromkeys({'name','age'},'unknown')
{'age': 'unknown', 'name': 'unknown'}
一般开说,试图访问字典中不存在的键时会出错,而使用get方法时就不会出错,默认返回None,也可以自己提供默认值
x = {}.fromkeys({'name','age'},'unknown')
d.get('sex','unknown')
'unknown'
检查字典中是否含有特定的键。表达式d.has_key(k)相当于表达式k in d。返回True或者False
-items
items将字典中所有的项以列表的形式返回
d = {'name':'zhao','age':[42,'man']}
d.items()
dict_items([('name', 'zhao'), ('age', [42, 'man'])])
以列表的形式返回
-pop
将获得的键-值从字典中移除,返回移除键的值
d = {'name':'zhao','age':[42,'man']}
c = d.pop('name')
print (d)
print (c)
{'age': [42, 'man']} zhao
随机删除一个键-值,返回值是元组的形式被删除的键-值
d = {'name':'zhao','age':[42,'man']}
c = d.popitem()
print (d)
print (c)
{'name': 'zhao'} ('age', [42, 'man'])
-setdefault
方法类似于get,但会在字典中不含有给定键的情况下设定相应的键值
d = {'name':'zhao','age':[42,'man']}
c = d.setdefault('addr','unknown')
print (d)
print (c)
{'name': 'zhao', 'age': [42, 'man'], 'addr': 'unknown'} unknown
#默认值值可选的,不设定,会默认使用None
-update
利用一个字典来更新另外一个字典
d = {'name':'zhao','age':[42,'man']}
c = {'sex':'male','name':'qian'}
d.update(c)
print (d)
{'name': 'qian', 'age': [42, 'man'], 'sex': 'male'}
相同键会覆盖,没有的将会添加到旧的字典中
-values
以列表的形式返回字典中的值
d = {'name':'zhao','age':[42,'man']}
c = {'sex':'male','name':'qian'}
d.update(c)
print (d)
d.values()
Out[165]: