字典

除了列表,字典就是python中最灵活的数据类型了。

通过键而不是偏移量来读取:字典有时叫关联数组或者散列表

任意对象的无序集合:键提供了字典中项的象征性(而非物理性)位置,不支持序列操作(无序)

可变长,异构,任意嵌套:可在原处增长或缩短

属于可变映射类型:字典是唯一内置的映射类型

对象引用表(散列表): 字典是作为散列表(支持快速检索的数据结构)来实现的。Python采用最优化的散列算法来寻找键,因此搜索是很快速的。

常见字典常量和操作
操作解释
D = {}空字典
D = {'spam': 2, 'eggs': 3} 
D = {'food': {'ham': 1, 'egg': 2}}嵌套
D = dict.fromkeys(['a', 'b'])(得到{'a': None, 'b': None})其他构造技术
D = dict(zip(keyslist, valslist)) 
D = dict('name='Bob', age=42)新方法
D['eggs']以键进行索引
D['food']['ham'] 
'eggs' in D成员关系
D.keys()
D.values()
D.items()项(键,值)
D.copy() 
D.get(key, default)get key对应的value, 否则返回default
D.update(D2)合并
D.pop(key)删除
len(D) 
D[key]=42新增or修改
del D[key] 
list(D.keys()) 
D1.keys() &D2.keys() 
Dictionary views??
D = {x: x*2 for x in range(10)}字典解析

Python3.x中d.keys()返回一个迭代器而不是列表,python2.x返回的是列表

字典用法注意事项:

序列运算无效

对新索引赋值会添加项

键不一定总是字符串,任何不可变对象都可以作为键。不包含可变元素的元组可以作为键。只要有合适的协议,类实例对象也可以作为键。

 

使用字典模拟灵活的列表

列表末尾外的偏移值是非法的

>>> L = []
>>> L[99] = 'spam'
Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    L[99] = 'spam'
IndexError: list assignment index out of range

使用字典模拟:

>>> D = {}
>>> D[99]='spam'
>>> D[99]
'spam'

字典接口

Python的DBM接口通过键来获取文件:

import anydbm

file = anydbm.open('filename'

import anydbm
file = anydbm.open('filename')    #Link to file
file['key'] = 'data'    #Store data by key
data = file['key']    #fetch data by key

如果你把这段代码中的anydbm改成shelve(shelve是通过键来访问的Python持久对象的数据库),那么你也可以用这种方法储存整个python对象

 

字典解析

>>> list(zip(['a','b','c'],[1,2,3]))
[('a', 1), ('b', 2), ('c', 3)]
>>> D = dict(zip(['a','b','c'],[1,2,3]))
>>> D
{'a': 1, 'b': 2, 'c': 3}
>>> D = {k:v for (k,v) in zip(['a','b','c'],[1,2,3])}
>>> D
{'a': 1, 'b': 2, 'c': 3}
>>> D = dict.fromkeys(['a','b','c'],0)
>>> D
{'a': 0, 'b': 0, 'c': 0}

Learning Python, Fourth Edition, by Mark Lutz.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值