Python中的dict字典
字典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)])

浙公网安备 33010602011771号