python基础教程之字典操作详解
2014-05-19来源:易贤网

这篇文章主要介绍了python中的字典操作详解,需要的朋友可以参考下。

字典

dictionary1.键值对的集合(map)2.字典是以大括号“{}”包围的数据集合3.字典是无序的,在字典中通过键来访问成员。可变的,可嵌套,可以原处修改扩展等,不产生新的字典4.字典的键,可以是字符串(大小写敏感),数字常量或元组(不可变类型),同一个字典的键可以混用类型。字典的键必须是可哈希的元组作为键的条件是,元组内的值都是不可变类型

代码如下:

a=(1,2)#可以作为键

b=(1,2,[3,4])#不可以

5.字典的值可以是任意类型,可以嵌套,可以自由修改声明

创建字典的几种方式:1.基本

代码如下:

d={}#空字典

d={'name':'tom','age':22}

#等价

d={}

d['name']='tom'

d['age']=22

2.dict

代码如下:

d=dict()#空

d=dict(name='tom',age=22)d=dict([('name','tom'),('age',22)])

#等价

keys=['name','age']

values=['tom',22]

d=dict(zip(keys,values))3.fromkeys不指定default_value的话,默认None

代码如下:

>>>dict.fromkeys(['name','age'],'default_value')

{'age':'default_value','name':'default_value'}

基本操作0.获取帮助

代码如下:

help(dict)1.判定键是否存在于字典中

代码如下:

ifkind:#knotin

dosomething()

2.读取

代码如下:

d={'a':1,'b':2}

printd['a']#得到1,但是若键不存在,将引发异常KeyError。慎用,建议不使用printd.get('c',3)#得到3,get方法,若是键不存在,返回第二个参数default_value.若是没有设default_value返回None

处理missing-key错误三种方式,根据具体需要

代码如下:

ifkind:

printd[k]try:

printd[k]

exceptKeyError:

dosomething()printd.get(k,default)

#等价d[k]ifkindelsedefault3.遍历方式1:

代码如下:

forkeyind:

printkey,d[key]

#等价forkeyind.keys()

方式2:

代码如下:

forkey,valueind.items():

printkey,value

4.修改方式1:某个键值对

代码如下:

d['key']='newvalue'

方式2:批量添加或更新

代码如下:

#另一个字典

d.update({'key':'newvalue'})#这里支持一整组值#元组列表

d.update([('a',1),('b',2)])#每个元组两个元素,(key,value)#**key

d.update(c=3,e=4)5.删除

代码如下:

deld['key']

value=d.pop('key')#删除并返回值

d.clear()#清空

6.其他:len(d)#长度

d.keys()#key列表

d.values()#value列表

d.items()#(key,value)列表

c=d.copy()#浅拷贝

#返回迭代器,节省内存

d.iterkeys()

d.itervalues()

d.iteritems()

d.setdefault('name','ken')#若原来没有,设置,否则原值不变其他

1.字典排序按照key排序

代码如下:

keys=d.keys()

keys.sort()

forkeyinkeys:

printd.get(key)

按照value进行排序

代码如下:

sorted(d.items(),lambdax,y:cmp(x[1],y[1]))另外:

代码如下:

#假设d为字典

sorted(d)#返回同sorted(d.keys()),返回的是key排序

2.自定义对象作为key必须:

代码如下:

def__hash__(self):

pass

def__eq__(self,other):

pass

3.字典拷贝浅拷贝:

代码如下:

c=d.copy()#深拷贝必须用copy模块

代码如下:

formcopyimportdeepcopy

c=deepcopy(d)

4.一种使用场景假设有一个很大的列表l,假设10w条记录有一个小列表b,要判断b中元素是否在l中如果:

代码如下:

foriinb:

ifiinl:

dosomething()

你会发现非常非常慢...因为第二个in语句,会遍历10w条….改进:

代码如下:

d=dict.fromkeys(l)

foriinb:

ifiind:

dosomething()

#空间换时间,O(n)->O(1)

更多信息请查看IT技术专栏

2025公考·省考培训课程试听预约报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
推荐信息