字典

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}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值