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实现strcmp函数功能示例
Mar 25 Python
浅析python中SQLAlchemy排序的一个坑
Feb 24 Python
python递归查询菜单并转换成json实例
Mar 27 Python
Python简单生成随机姓名的方法示例
Dec 27 Python
Python基于辗转相除法求解最大公约数的方法示例
Apr 04 Python
kaggle+mnist实现手写字体识别
Jul 26 Python
Python格式化输出字符串方法小结【%与format】
Oct 29 Python
Django Rest framework频率原理与限制
Jul 26 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
Aug 12 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
Apr 27 Python
Django静态资源部署404问题解决方案
May 11 Python
pytorch 权重weight 与 梯度grad 可视化操作
Jun 05 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
冰滴咖啡制作步骤
2021/03/03 冲泡冲煮
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
php生成的html meta和link标记在body标签里 顶部有个空行
2010/05/18 PHP
php实现的简单检验登陆类
2015/06/18 PHP
php图形jpgraph操作实例分析
2017/02/22 PHP
JQuery操作表格(隔行着色,高亮显示,筛选数据)
2012/02/23 Javascript
jQuery对于显示和隐藏等常用状态的判断方法
2014/12/13 Javascript
jquery图片播放浏览插件prettyPhoto使用详解
2014/12/19 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
2015/01/13 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
JavaScript检测字符串中是否含有html标签实现方法
2015/07/01 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
2015/12/18 Javascript
基于JS如何实现类似QQ好友头像hover时显示资料卡的效果(推荐)
2016/06/09 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
2016/07/14 Javascript
webpack入门必知必会
2017/01/16 Javascript
微信小程序实现动态获取元素宽高的方法分析
2018/12/10 Javascript
说说如何在Vue.js中实现数字输入组件的方法
2019/01/08 Javascript
[01:25:09]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第二场
2014/05/24 DOTA
使用PyCharm配合部署Python的Django框架的配置纪实
2015/11/19 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
2019/10/24 Python
Django中的session用法详解
2020/03/09 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
Pygame的程序开始示例代码
2020/05/07 Python
matplotlib之属性组合包(cycler)的使用
2021/02/24 Python
灵活运用CSS3特性绘制简易版围棋效果
2016/09/28 HTML / CSS
CSS3实现缺角矩形,折角矩形以及缺角边框
2019/12/20 HTML / CSS
Woods官网:加拿大最古老、最受尊敬的户外品牌之一
2020/09/12 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
手工社团活动方案
2014/02/17 职场文书
会计个人实习计划书
2014/08/15 职场文书
民事诉讼代理词
2015/05/25 职场文书
python简单验证码识别的实现过程
2021/06/20 Python
Android开发 使用文件储存的方式保存QQ密码
2022/04/24 Java/Android
Python+pyaudio实现音频控制示例详解
2022/07/23 Python