[Python入门及进阶笔记]Python-基础-字典小结
来源:互联网 发布:淘宝手机估价 编辑:程序博客网 时间:2024/06/07 09:15
博客迁往:新地址 (点击直达)
新博客使用markdown维护,线下有版本库,自己写的所以会定时更新同步,同时提供更好的导航和阅读体验
csdn对markdown支持不好,所以旧版不会花时间进行同步修订,抱歉
-----------------------
字典
定义
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)#**keyd.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): passdef __eq__(self, other): pass
3.字典拷贝浅拷贝:
c = d.copy() #
深拷贝必须用copy模块
form copy import deepcopyc = 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)
The end!
To be continue
wklken
Email: wklken@yeah.net
Blog: http://blog.csdn.net/wklken
2013-03-09
转载请注明出处,谢谢
- [Python入门及进阶笔记]Python-基础-字典小结
- [Python入门及进阶笔记]Python-基础-函数小结
- [Python入门及进阶笔记]Python-基础-字符串小结
- [Python入门及进阶笔记]Python-基础-文件处理小结
- [Python入门及进阶笔记]Python-基础-元组小结
- [Python入门及进阶笔记]Python-基础-数字小结
- [Python入门及进阶笔记]Python-基础-集合小结
- [Python入门及进阶笔记]Python-基础-内置函数小结
- [Python入门及进阶笔记]Python-基础-函数小结
- [Python入门及进阶笔记]Python-基础-字符串小结
- [Python入门及进阶笔记]Python-基础-文件处理小结
- [Python入门及进阶笔记]Python-基础-内置函数小结
- [Python入门及进阶笔记]Python-基础-列表及列表解析小结
- [Python入门及进阶笔记]Python-基础-列表及列表解析小结
- [Python入门及进阶笔记]Python-decorator装饰器小结
- [Python入门及进阶笔记]Python-decorator装饰器小结
- [Python入门及进阶笔记]Python-decorator装饰器小结
- [Python入门及进阶笔记]Python-基础-简介/入门
- JAVA 包与包之间访问(package)
- 对Action指定方法进行校验
- ACMer 2013 Daily Training- 7th Mar for 11x&&12x
- iPad App
- 无net,纯API添加管理员用户--VC
- [Python入门及进阶笔记]Python-基础-字典小结
- 做事必须搞清10个顺序
- 35岁前要做的7件与工作相关的事
- UILabel中的文字顶端对齐
- POJ-2965-The Pilots Brothers' refrigerator
- ASP.NET与JS交互
- linux 下 自动登陆 SFTP 服务器 下载文件
- 《python源码剖析》之实现small python
- 周赛字符串总结