python基础教程之字典操作详解


Posted in Python onMarch 25, 2014

字典
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)
Python 相关文章推荐
Python中处理字符串的相关的len()方法的使用简介
May 19 Python
Python修改MP3文件的方法
Jun 15 Python
基于python的多进程共享变量正确打开方式
Apr 28 Python
浅谈Series和DataFrame中的sort_index方法
Jun 07 Python
WxPython建立批量录入框窗口
Feb 27 Python
python re模块匹配贪婪和非贪婪模式详解
Feb 11 Python
python使用QQ邮箱实现自动发送邮件
Jun 22 Python
Django实现内容缓存实例方法
Jun 30 Python
用python写PDF转换器的实现
Oct 29 Python
python通用数据库操作工具 pydbclib的使用简介
Dec 21 Python
Python如何实现感知器的逻辑电路
Dec 25 Python
解决Pytorch中关于model.eval的问题
May 22 Python
python基础教程之元组操作使用详解
Mar 25 #Python
python基础教程之简单入门说明(变量和控制语言使用方法)
Mar 25 #Python
python使用循环实现批量创建文件夹示例
Mar 25 #Python
python实现图片批量剪切示例
Mar 25 #Python
使用python实现strcmp函数功能示例
Mar 25 #Python
python读写ini文件示例(python读写文件)
Mar 25 #Python
python判断windows隐藏文件的方法
Mar 21 #Python
You might like
php控制linux服务器常用功能 关机 重启 开新站点等
2012/09/05 PHP
浅析memcache启动以及telnet命令详解
2013/06/28 PHP
ThinkPHP3.1基础知识快速入门
2014/06/19 PHP
用js 让图片在 div或dl里 居中,底部对齐
2008/01/21 Javascript
jQuery MD5加密实现代码
2010/03/15 Javascript
防止页面被iframe(兼容IE,Firefox火狐)
2010/07/04 Javascript
JavaScript具有类似Lambda表达式编程能力的代码(改进版)
2010/09/14 Javascript
jquery load事件(callback/data)使用方法及注意事项
2013/02/06 Javascript
JQuery中extend使用介绍
2014/03/13 Javascript
javascript中expression的用法整理
2014/05/13 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
2016/03/22 Javascript
bootstrap网页框架的使用方法
2016/05/10 Javascript
js实现横向拖拽导航条功能
2017/02/17 Javascript
javascript 玩转Date对象(实例讲解)
2017/07/11 Javascript
webpack打包nodejs项目的方法
2018/09/26 NodeJs
webpack之引入图片的实现及问题
2018/10/08 Javascript
clipboard在vue中的使用的方法示例
2018/10/19 Javascript
微信上传视频文件提示(推荐)
2018/11/22 Javascript
浅谈vue限制文本框输入数字的正确姿势
2019/09/02 Javascript
js重写alert事件(避免alert弹框标题出现网址)
2020/12/04 Javascript
[01:08:29]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第一场 1月9日
2021/03/11 DOTA
在Python的Django框架中调用方法和处理无效变量
2015/07/15 Python
Python中pygame安装方法图文详解
2015/11/11 Python
python 实现求解字符串集的最长公共前缀方法
2018/07/20 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
python中使用while循环的实例
2019/08/05 Python
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
京剧自荐信
2014/01/26 职场文书
环保建议书作文
2014/03/12 职场文书
大学生就业自我推荐信
2014/05/10 职场文书
高中课程设置方案
2014/05/28 职场文书
2015新年寄语大全
2014/12/08 职场文书
世界遗产的导游词
2015/02/13 职场文书
硕士论文致谢范文
2015/05/14 职场文书
MySQL表字段时间设置默认值
2021/05/13 MySQL
MySQL 原理与优化之Limit 查询优化
2022/08/14 MySQL