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基础之基本运算符概述
Aug 13 Python
Python单元测试框架unittest使用方法讲解
Apr 13 Python
python实现下载文件的三种方法
Feb 09 Python
使用Python实现博客上进行自动翻页
Aug 23 Python
Python二叉树定义与遍历方法实例分析
May 25 Python
Django 1.10以上版本 url 配置注意事项详解
Aug 05 Python
Python 中如何实现参数化测试的方法示例
Dec 10 Python
Python包,__init__.py功能与用法分析
Jan 07 Python
python实现读取类别频数数据画水平条形图案例
Apr 24 Python
记录模型训练时loss值的变化情况
Jun 16 Python
PyQT5速成教程之Qt Designer介绍与入门
Nov 02 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
Jan 08 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读取MySQL数据代码
2008/06/05 PHP
PHP技术开发技巧分享
2010/03/23 PHP
php 字符串中的\n换行符无效、不能换行的解决方法
2014/04/02 PHP
php批量删除数据库下指定前缀的表以prefix_为例
2014/08/24 PHP
php集成环境xampp中apache无法启动问题解决方案
2014/11/18 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
2016/09/26 PHP
php实现自定义中奖项数和概率的抽奖函数示例
2017/05/26 PHP
php实现的PDO异常处理操作分析
2018/12/27 PHP
JavaScript使用技巧精萃[代码非常实用]
2008/11/21 Javascript
JavaScript的递归之递归与循环示例介绍
2013/08/05 Javascript
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
js仿黑客帝国字母掉落效果代码分享
2020/11/08 Javascript
jQuery自动完成插件completer附源码下载
2016/01/04 Javascript
JavaScript中的Object对象学习教程
2016/05/20 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
JavaScript实现左侧菜单效果
2017/12/14 Javascript
Node.js爬取豆瓣数据实例分析
2018/03/05 Javascript
Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
2018/06/19 Javascript
新手快速上手webpack4打包工具的使用详解
2019/01/28 Javascript
vue实现短信验证码输入框
2020/04/17 Javascript
JS如何生成动态列表
2020/09/22 Javascript
解决vscode进行vue格式化,会自动补分号和双引号的问题
2020/10/26 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
Python用户推荐系统曼哈顿算法实现完整代码
2017/12/01 Python
Python中的函数作用域
2018/05/07 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
Python 忽略文件名编码的方法
2020/08/01 Python
浅析canvas元素的html尺寸和css尺寸对元素视觉的影响
2019/07/22 HTML / CSS
CAT鞋美国官网:CAT Footwear
2017/11/27 全球购物
与UNIX有关的几个名词
2015/09/17 面试题
总经理办公室主任岗位职责
2013/11/12 职场文书
创先争优演讲稿
2014/09/15 职场文书
领导班子作风建设剖析材料
2014/10/11 职场文书
教师纪律作风整顿心得体会
2016/01/23 职场文书
销区经理年终述职报告模板
2019/11/28 职场文书
Html5调用企业微信的实现
2021/04/16 HTML / CSS