Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
假设要根据同学的名字查找对应的成绩 ,用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用Python写一个dict如下:
>>>d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>>d['Michael']
95
这种key-value存储方式,在放进去的时候,必须根据key算出value的存放位置,这样,取的时候才能根据key直接拿到value。
字典常用函数
1、赋值、修改、索引
D1={} 空字典
D={'one':1} 设置字典
D2={'name':'diege','age':18} 两项目字典
D3={'name':{'first':'diege','last':'wang'},'age':18}嵌套
D1[key]='class' 增加数据:已经存在就是修改,没有存在就是增加数据
D2['name'] 以键进行索引计算
D3['name']['last'] 字典嵌套字典的键索引
D['three'][0] 字典嵌套列表的键索引
D['six'][1] 字典嵌套元组的键索引
2、键,值,求长,索引
dict.keys() 方法:键列表 返回一个包含字典中键的列表
dict.values() 方法:值列表 返回一个包含字典中所有值的列表
len(D) 方法:求长(存储元素的数目)
3、删除,拷贝,合并,清空
1)删除
del dict[’key'] 函数del 函数字典中指定键
dict.pop('age') 根据key删除,并返回删除的value
dict.pop(key[, default]) 和方法get()相似,如果字典中key 键存在,删除并返回dict[key],如果key 键不存在,且没有给出default 的值,引发KeyError 异常。
dict.popitem() 从字典前面一对K:V的方式删除,并返回K,V合成的元组
>>> D
{'name': 'jin', 'sex': 'man'}
>>> D.popitem()
('name', 'jin')
>>> D
{'sex': 'man'}
2)拷贝
dict.copy() 方法:拷贝 返回字典(浅复制)的一个副本
3)合并
D2.update(D1) 方法:合并。D1合并到D2,D1没有变化,D2变化。
4)清除
dict.clear() 方法:清除字典 删除字典中所有元素,字典对象还有,但字典是空字典
del dict del函数删除整个dict字典 字典对象也都没有
4、key存在判断
dict.has_key(key) 方法:判断字典是否有key键 如果键(key)在字典中存在,返回True,否则返回False.
'name' in D 方法:成员测试:注意使用key来测试
'name' not in D 方法: 成员测试,不存在key的情况
5、默认值
1)、创建时设置默认值
dict.setdefault(key,default=None)和方法set()相似,如果字典中不存在key 键,由dict[key]=default 为它赋值,如果存在则不改变原字典值
>>>D.setdefault('name','jin')
'jin'
>>> D
{'name': 'jin'}
>>> D.setdefault('name','test')
'jin'
>>> D
{'name': 'jin'}
2)、求值是设置字典默认值
dict.get(key,default=None) 对字典dict中的存在的键key,返回它对应的值value,如果字典中不存在此键,则返回default的值(注意,参数default 的默认值为None)
>>> D
{'name': 'jin'}
>>> D.get('sex','man') #不存在时返回设置的默认值
'man'
>>> D
{'name': 'jin'}
>>>D.get('name','diege') #存在时返回存在健的值
'jin'
>>> D
{'name': 'jin'}
6、特别健值组合
dict.items() 返回一个包含字典中(键, 值)对元组的列表
dict.iter() 方法iteritems(), iterkeys(), itervalues()与它们对应的非迭代方法一样,不同的是它们返回一个迭代子,而不是一个列表。
dict.items() 实例
>>> D.items()
[('name', 'jin'), ('sex','man')]
iteritems() 实例
>>> for i inD.iteritems():
... print i
...
('name', 'jin')
('sex', 'man'
'fromkeys',
'get',
iterkeys() 实例
>>> for i inD.iterkeys():
... print i
...
name
sex
itervalues() 实例
>>> for i inD.itervalues():
... print i
...
jin
man
8、创建字典的多种方法
1)
>>>{'name':'diege','age':45}
{'age': 45, 'name': 'diege'}
2)
>>> D={}
>>> D['name']='lily'
>>> D['age']=18
>>> D
{'age': 18, 'name': 'lily'}
3)dict(key1='value1',key2='value2')
>>>dict(name='kelly',age=19)
{'age': 19, 'name': 'kelly'}
注意这里name,age没有 ’‘括起来,因为这里是变量。
4)dict([(’key1','value1'),(key2','value2')])
>>>dict([('name','tom'),('age',23)])
{'age': 23, 'name': 'tom'}
这里将每一个数据(属性),做为元组放到一个列表里传递给dict函数
dict(列表,列表中的每个元素是一对key value 组成的元组)
5)dict(zip(keyslist,valslist))
>>>keyslist=['shell','sql']
>>>valslist=[['s1','k1','all'],['s1','k1','all']]
>>> keyslist
['shell', 'sql']
>>> valslist
[['s1', 'k1', 'all'], ['s1','k1', 'all']]
>>> D=dict(zip(keyslist,valslist))
>>> D
{'shell': ['s1', 'k1','all'], 'sql': ['s1', 'k1', 'all']}
6)dict.fromkeysc(seq,val=None) 方式
dict.fromkeysc(seq,val=None) 创建并返回一个新字典,以seq中的元素做该字典的键的列表,val 做该字典中所有键对应的初始值(如果不提供此值,则默认为None)
dict.fromkeys 可以从一个列表读取字典的key 值默认为空,可指定初始值.两个参数一个是KEY列表,一个初始值
>>>dict.fromkeys(['a','b','c'],0)
{'a': 0, 'c': 0, 'b': 0}
6种方法的选择技巧
*如果可以事先拼除整个字典,那么第一种是很方便的。
*如果需要一次动态地建立字典的一个字段,第二种比较合适
*第三种关键字形式所需的代码比常量少,但是键必须是都是字符串才可行
*如果需要在程序运行时把键和值逐步建成序列。第四中比较有用。
set
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
要创建一个set,需要提供一个list作为输入集合:
>>> s = set([1, 2,3])
>>> s
{1, 2, 3}
注意,传入的参数[1, 2, 3]是一个list,而显示的{1, 2, 3}只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。。
重复元素在set中自动被过滤:
>>> s = set([1, 1,2, 2, 3, 3])
>>> s
{1, 2, 3}