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 相关文章推荐
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
May 22 Python
Python判断直线和矩形是否相交的方法
Jul 14 Python
Python 递归函数详解及实例
Dec 27 Python
TensorFlow数据输入的方法示例
Jun 19 Python
python 用下标截取字符串的实例
Dec 25 Python
Python Flask框架扩展操作示例
May 03 Python
python实现截取屏幕保存文件,删除N天前截图的例子
Aug 27 Python
Python3将jpg转为pdf文件的方法示例
Dec 13 Python
使用python客户端访问impala的操作方式
Mar 28 Python
Python bisect模块原理及常见实例
Jun 17 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
Feb 06 Python
python实现语音常用度量方法的代码详解
May 25 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
DC《神奇女侠2》因疫情推迟上映 温子仁新恐怖片《恶性》撤档
2020/04/09 欧美动漫
php 正则表达式小结
2009/08/31 PHP
php递归使用示例(php递归函数)
2014/02/14 PHP
3个PHP多维数组转为一维数组的方法实例
2014/03/13 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
2016/03/21 PHP
php实现PDO中捕获SQL语句错误的方法
2017/02/16 PHP
PHP实现文件上传后台处理脚本
2020/03/04 PHP
jQuery EasyUI中对表格进行编辑的实现代码
2010/06/10 Javascript
仿微博字符限制效果实现代码
2012/04/20 Javascript
js实现兼容IE和FF的上下层的移动
2015/05/04 Javascript
jQuery实现首页图片淡入淡出效果的方法
2015/06/10 Javascript
JavaScript判断undefined类型的正确方法
2015/06/30 Javascript
javascript RegExp 使用说明
2016/05/21 Javascript
headjs实现网站并行加载但顺序执行JS
2016/11/29 Javascript
TypeScript入门-接口
2017/03/30 Javascript
解决element-ui中下拉菜单子选项click事件不触发的问题
2018/08/22 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
2018/09/04 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
2020/03/02 Javascript
vue实现购物车结算功能
2020/06/18 Javascript
[03:39]DOTA2英雄梦之声_第05期_幽鬼
2014/06/23 DOTA
详解python单例模式与metaclass
2016/01/15 Python
Python语言描述连续子数组的最大和
2018/01/04 Python
Python交互环境下实现输入代码
2018/06/22 Python
flask框架视图函数用法示例
2018/07/19 Python
python爬虫智能翻页批量下载文件的实例详解
2021/02/02 Python
CSS3之边框多颜色Border-color属性使用示例
2013/10/11 HTML / CSS
基于HTML5 Canvas的3D动态Chart图表的示例
2017/11/02 HTML / CSS
升职自荐信范文
2013/10/05 职场文书
幼儿如何来做好自我评价
2013/11/05 职场文书
楼面经理岗位职责范本
2014/02/18 职场文书
商铺租赁意向书
2014/04/01 职场文书
高中教师评语大全
2014/04/25 职场文书
群众路线教育实践活动个人对照检查材料思想汇报(社区班子)
2014/10/06 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
综治工作汇报材料
2014/10/27 职场文书
幼儿园心得体会范文
2016/01/21 职场文书