字典dict
介绍
- key-value键值对的数据集合
- 是可变的、无序的、key具有唯一性
字典创建
- d = dict()
- d = {}
- Dict(**kwargs) 使用name=value初始化一个字典
字典访问
- d[key]
- 返回key对应的value
- key不存在抛出keyError异常
- get(key[, default])
- 返回key对应的value
- key不存在返回默认值,如果没有default返回None
- get方法不会抛异常
- setdefault(key[, default])
- 返回key对应的value
- key不存在,则添加kv对,value为default值
字典增加和修改
- d[key] = value
- 将key对应的值修改为value
- key不存在添加新的键值对
- update([other]) —> None
- 使用另一个字典的键值对更新本字典
- key不存在,就添加
- key存在,覆盖已存在的key对应的value
- 原处修改
字典删除
- pop(key[, default])
- key存在,移除,并返回它的value
- key不存在,返回给定的default
- default未设置,key不存在则抛出keyError
- popitem()
- 移除并返回一个任意的键值对
- 字典为空,抛出keyError
- clear()
- 清空字典
字典删除
- del语句
- del d['c']
- del本质上删除的是一个对象的引用
字典遍历
- for … in dict
- 遍历key
for k in d1:
print(k)
for k in d.keys():
print(k)
- 遍历value
for v in d.values():
print(v)
for v in d:
print(d.get(v))
- 遍历键值对
for item in d.items():
print(item) # 返回值为元组
for k,v in d.items() # k,v 可使用结构方式
print(k,v) # 返回k或者v
- 总结
- python3中,keys/values/items方法返回一个可迭代对象,不会将结果保存在内存中
- python2中,上面的方法会返回一个新的列表,占据新的内存,所以python2中建议使用iterkeys、itervalues,会返回一个迭代器
字典的key
- key的要求必须为可hash
缺省字典defaultdict
- Collections.defaultdict([default_factory[,...]])
- 第一个参数是default_factory,缺省是None,它提供了一个初始化函数,当key不存在,这个工厂函数来生成key对应的value
from collections import defaultdict
d1 = {}
d2 = defaultdict(list) # 创建缺省字典,如果key不存在,则生成k对应的空列表
for k in "abcde":
for v in range(5):
if k not in d1.keys():
d1[k] = []
d1[k].append(v)
print(d1)
for k in "mnopq":
for v in range(3):
d2[k].append(v) # 相当于调用缺省字典的工厂函数判断k是否存在,如果不存在则创建键值对,并添加v
print(d2)
顺序字典orderedDict
- collections.OrderedDict([items])
- 有序字典可以记录元素插入的顺序,打印的时候也是按照这个顺序输出。
- key并不是按照加入的顺序排列,可使用OrderedDict来顺序排列
# 普通字典
>>> d = {}
>>> d['apple'] = 3
>>> d['orange'] = 4
>>> d['pear'] = 1
>>> d['banabna'] = 2
>>> d
{'orange': 4, 'pear': 1, 'apple': 3, 'banabna': 2}
# 有序字典
>>> from collections import OrderedDict
>>> od = OrderedDict()
>>> od['apple'] = 3
>>> od['orange'] = 4
>>> od['pear'] = 1
>>> od['banabna'] = 2
>>> od
OrderedDict([('apple', 3), ('orange', 4), ('pear', 1), ('banabna', 2)])