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的迭代器和生成器
Jul 29 Python
python实现分页效果
Oct 25 Python
Python面向对象编程基础解析(一)
Oct 26 Python
Python实现按中文排序的方法示例
Apr 25 Python
Python二叉树定义与遍历方法实例分析
May 25 Python
利用Python半自动化生成Nessus报告的方法
Mar 19 Python
如何利用python给图片添加半透明水印
Sep 06 Python
Python用5行代码实现批量抠图的示例代码
Apr 14 Python
Python爬虫之爬取淘女郎照片示例详解
Jul 28 Python
Python‘==‘ 及 ‘is‘相关原理解析
Sep 05 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
Mar 01 Python
聊一聊python常用的编程模块
May 14 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 基于Yii框架中使用smarty模板的方法详解
2013/06/13 PHP
Yii数据读取与跳转参数传递用法实例分析
2016/07/12 PHP
JavaScript调用Activex控件的事件的实现方法
2010/04/11 Javascript
js操作select控件的几种方法
2010/06/02 Javascript
js实现禁止中文输入的方法
2015/01/14 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
Javascript获取图片原始宽度和高度的方法详解
2016/09/20 Javascript
Node.js与MySQL交互操作及其注意事项
2016/10/05 Javascript
JavaScript实现Java中Map容器的方法
2016/10/09 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
2016/10/20 Javascript
jQuery使用正则表达式替换dom元素标签用法示例
2017/01/16 Javascript
jQuery动画_动力节点节点Java学院整理
2017/07/04 jQuery
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
简单谈谈CommonsChunkPlugin抽取公共模块
2017/12/31 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
2018/02/22 Javascript
create-react-app修改为多页面支持的方法
2018/05/17 Javascript
JS温故而知新之变量提升和时间死区
2019/01/27 Javascript
vue-video-player 解决微信自动全屏播放问题(横竖屏导致样式错乱问题)
2020/02/25 Javascript
python利用sklearn包编写决策树源代码
2017/12/21 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
2018/03/05 Python
python实现超市扫码仪计费
2018/05/30 Python
Python使用pymongo模块操作MongoDB的方法示例
2018/07/20 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
Python识别快递条形码及Tesseract-OCR使用详解
2019/07/15 Python
python+mysql实现个人论文管理系统
2019/10/25 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
2020/06/15 Python
检测浏览器对HTML5和CSS3支持度的方法
2015/06/25 HTML / CSS
HTML5对比HTML4的主要改变和改进总结
2016/05/27 HTML / CSS
医科大学生毕业的自我评价分享
2013/11/12 职场文书
《囚绿记》教学反思
2014/03/01 职场文书
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
学籍证明模板
2014/11/21 职场文书
2019新员工试用期转正申请书3篇
2019/08/13 职场文书
python 实现定时任务的四种方式
2021/04/01 Python
对讲机的最大通讯距离是多少
2022/02/18 无线电