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实现将汉字转换成汉语拼音的库
May 05 Python
python用10行代码实现对黄色图片的检测功能
Aug 10 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
Dec 12 Python
在pandas中一次性删除dataframe的多个列方法
Apr 10 Python
Python DataFrame一列拆成多列以及一行拆成多行
Aug 06 Python
将Pytorch模型从CPU转换成GPU的实现方法
Aug 19 Python
Python计算两个矩形重合面积代码实例
Sep 16 Python
Python程序暂停的正常处理方法
Nov 07 Python
Python Django2.0集成Celery4.1教程
Nov 19 Python
Python打印特殊符号及对应编码解析
May 07 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
Jan 05 Python
Python语言规范之Pylint的详细用法
Jun 24 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获取当前页面完整URL地址
2015/12/30 PHP
PHP与SQL语句常用大全
2016/12/10 PHP
Mootools 1.2教程 函数
2009/09/15 Javascript
Jquery异步请求数据实例代码
2011/12/28 Javascript
使用javascript创建快捷方式的简单实例
2013/08/09 Javascript
Chrome扩展页面动态绑定JS事件提示错误
2014/02/11 Javascript
JavaScript使用yield模拟多线程的方法
2015/03/19 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)
2016/06/22 Javascript
js修改onclick动作的四种方法(推荐)
2016/08/18 Javascript
NodeJS爬虫实例之糗事百科
2017/12/14 NodeJs
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
详解angularjs跨页面传参遇到的一些问题
2018/11/01 Javascript
自定义Vue组件打包、发布到npm及使用教程
2019/05/22 Javascript
微信小程序实现下拉加载更多商品
2020/12/29 Javascript
详解React中共享组件逻辑的三种方式
2021/02/02 Javascript
python之PyMongo使用总结
2017/05/26 Python
Python利用递归和walk()遍历目录文件的方法示例
2017/07/14 Python
Python使用sort和class实现的多级排序功能示例
2018/08/15 Python
Django实现表单验证
2018/09/08 Python
Python中fnmatch模块的使用详情
2018/11/30 Python
详解Python 解压缩文件
2019/04/09 Python
django xadmin中form_layout添加字段显示方式
2020/03/30 Python
详解Python中list[::-1]的几种用法
2020/11/16 Python
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
如何用canvas实现在线签名的示例代码
2018/07/10 HTML / CSS
在线购买澳大利亚设计师手拿包和奢华晚装手袋:Olga Berg
2019/03/20 全球购物
资深地理教师自我评价
2013/09/21 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
罗马假日观后感
2015/06/08 职场文书
校园安全主题班会
2015/08/12 职场文书
执行力心得体会范文
2016/01/11 职场文书
利用Nginx代理如何解决前端跨域问题详析
2021/04/02 Servers
pytorch MSELoss计算平均的实现方法
2021/05/12 Python
MySQL中的全表扫描和索引树扫描
2022/05/15 MySQL