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 生成不重复的随机数的代码
May 15 Python
Python中实现远程调用(RPC、RMI)简单例子
Apr 28 Python
Python通过递归遍历出集合中所有元素的方法
Feb 25 Python
python使用电子邮件模块smtplib的方法
Aug 28 Python
浅谈Python中的bs4基础
Oct 21 Python
在PyCharm中实现关闭一个死循环程序的方法
Nov 29 Python
使用matplotlib绘制图例标签中带有公式的图
Dec 13 Python
详解用Python进行时间序列预测的7种方法
Mar 13 Python
python实现在线翻译
Jun 18 Python
Python如何实现后端自定义认证并实现多条件登陆
Jun 22 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
Jun 23 Python
Django 用户认证Auth组件的使用
Nov 30 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去除字符串换行符示例分享
2014/02/13 PHP
PHP随机数 C扩展随机数
2016/05/04 PHP
PHP版微信小店接口开发实例
2016/11/12 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
浅析PHP7 的垃圾回收机制
2019/09/06 PHP
ASP.NET jQuery 实例12 通过使用jQuery validation插件简单实现用户注册页面验证功能
2012/02/03 Javascript
js导航栏单击事件背景变换示例代码
2014/01/13 Javascript
jquery.post用法之type设置问题
2014/02/24 Javascript
用js判断是否为360浏览器的实现代码
2015/01/15 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
JavaScript基础重点(必看)
2016/07/09 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
2016/10/19 Javascript
nodejs个人博客开发第二步 入口文件
2017/04/12 NodeJs
微信小程序实现带缩略图轮播效果
2018/11/04 Javascript
用npm-run实现自动化任务的方法示例
2019/01/14 Javascript
性能优化篇之Webpack构建速度优化的建议
2019/04/03 Javascript
通过图带你深入了解vue的响应式原理
2019/06/21 Javascript
JavaScript剩余操作符Rest Operator详解
2019/07/20 Javascript
微信小程序如何播放腾讯视频的实现
2019/09/20 Javascript
Vue 中 filter 与 computed 的区别与用法解析
2019/11/21 Javascript
python单例模式实例分析
2015/04/08 Python
一键搞定python连接mysql驱动有关问题(windows版本)
2016/04/23 Python
12步入门Python中的decorator装饰器使用方法
2016/06/20 Python
Python在图片中添加文字的两种方法
2017/04/29 Python
python中获得当前目录和上级目录的实现方法
2017/10/12 Python
Python3 中文文件读写方法
2018/01/23 Python
Python Web程序搭建简单的Web服务器
2019/07/31 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
老板电器官方购物商城:老板油烟机、燃气灶、消毒柜、电烤箱
2018/05/30 全球购物
流行文化收藏品:Sideshow(DC漫画,星球大战,漫威)
2019/03/17 全球购物
英语专业学生个人求职信范文
2014/01/06 职场文书
增员口号大全
2014/06/18 职场文书
上课说话检讨书
2015/01/27 职场文书
课外活动总结
2015/02/04 职场文书
关于环保的广播稿
2015/12/17 职场文书
js不常见操作运算符总结
2021/11/20 Javascript