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 相关文章推荐
简单介绍Python2.x版本中的cmp()方法的使用
May 20 Python
python通过cookie模拟已登录状态的初步研究
Nov 09 Python
python3爬取淘宝信息代码分析
Feb 10 Python
使用OpenCV实现仿射变换—缩放功能
Aug 29 Python
Python3 使用selenium插件爬取苏宁商家联系电话
Dec 23 Python
dpn网络的pytorch实现方式
Jan 14 Python
keras的siamese(孪生网络)实现案例
Jun 12 Python
Python中zipfile压缩文件模块的基本使用教程
Jun 14 Python
理解深度学习之深度学习简介
Apr 14 Python
理解python中装饰器的作用
Jul 21 Python
分析Python list操作为什么会错误
Nov 17 Python
利用Python实现Picgo图床工具
Nov 23 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
在Linux系统的服务器上隐藏PHP版本号的方法
2015/06/06 PHP
PHP实现的一致性哈希算法完整实例
2015/11/14 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
2017/07/10 PHP
ThinkPHP5 验证器的具体使用
2018/05/31 PHP
jquery maxlength使用说明
2011/09/09 Javascript
javaScript 计算两个日期的天数相差(示例代码)
2013/12/27 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
2014/12/15 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
2015/05/07 Javascript
JavaScript数据结构与算法之栈与队列
2016/01/29 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
2016/10/20 Javascript
AngularJS中一般函数参数传递用法分析
2016/11/22 Javascript
JS实现搜索关键词的智能提示功能
2017/07/07 Javascript
JS实现音乐导航特效
2020/01/06 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
vue实现前端列表多条件筛选
2020/10/26 Javascript
JavaScript快速调试的两个技巧
2020/11/04 Javascript
使用Python3编写抓取网页和只抓网页图片的脚本
2015/08/20 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
python2.7实现爬虫网页数据
2018/05/25 Python
python f-string式格式化听语音流程讲解
2019/06/18 Python
基于Python实现拆分和合并GIF动态图
2019/10/22 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
在python中对于bool布尔值的取反操作
2020/12/11 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
2021/03/03 Python
HTML5 通信API 跨域门槛将不再高、数据推送也不再是梦
2013/04/25 HTML / CSS
波兰运动鞋网上商店:e-Sporting
2018/02/16 全球购物
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
财务会计专业个人求职信范本
2014/01/08 职场文书
普通员工辞职信
2014/01/17 职场文书
30年同学聚会邀请函
2014/01/25 职场文书
学生评语大全
2014/04/18 职场文书
大学生暑期社会实践证明范本
2014/10/24 职场文书
2016年万圣节活动总结
2016/04/05 职场文书
我的暑假生活作文(五年级)范文
2019/08/07 职场文书
七年级之家长会发言稿范文
2019/09/04 职场文书
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers