python字典应用场景_python基础教程之字典操作详解

字典

dictionary

1.键值对的集合(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.判定键是否存在于字典中

if k in d: #k not in

dosomething()

2.读取

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

print d['a'] #得到1,但是若键不存在,将引发异常KeyError。慎用,建议不使用

print d.get('c', 3) #得到3,get方法,若是键不存在,返回第二个参数default_value.若是没有设default_value返回None

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

if k in d:

print d[k]

try:

print d[k]

except KeyError:

dosomething()

print d.get(k, default)

#等价 d[k] if k in d else default

3.遍历

方式1:

for key in d:

print key, d[key]

#等价 for key in d.keys()

方式2:

for key,value in d.items():

print key, 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.删除

del d['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()

for key in keys:

print d.get(key)

按照value进行排序

sorted(d.items(), lambda x,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模块

form copy import deepcopy

c = deepcopy(d)

4.一种使用场景假设有一个很大的列表l,假设10w条记录

有一个小列表b,要判断b中元素是否在l中

如果:

for i in b:

if i in l:

dosomething()

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

改进:

d = dict.fromkeys(l)

for i in b:

if i in d:

dosomething()

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值