1.1字典的特征
key-value键值对的数据的集合 可变的,无序的,key不重复
1.2字典的dict定义,初始化
d = dict() 或者 d = {} dict(**kwargs) 使用name=value对初始化一个字典 #dc = dict(name='harden',age=18) dict(iterable, **kwarg) 使用可迭代对象和name=value对构造字典,不过可迭代对象的元素必须是 一个二元结构 #dc = dict([('a',1),('b',2)]) & d = dict(((1,'a'),(2,'b'))) & d = dict(([1,'a'],[2,'b'])) 类方法dict.fromkeys(iterable, value) #d = dict.fromkeys(range(5)) #d = dict.fromkeys(range(5),0)
1.3字典的元素访问
d[key] 返回key对应的值value key不存在抛出KeyError异常 get(key[, default]) 返回key对应的值value key不存在返回缺省值,如果没有设置缺省值就返回None setdefault(key[, default]) 返回key对应的值value key不存在,添加kv对,value为default,并返回default,如果default没有设置,缺省为None
1.4字典的增加和修改
d[key] = value 将key对应的值修改为value key不存在添加新的kv对 update([other]) -> None 使用另一个字典的kv对更新本字典 key不存在,就添加 key存在,覆盖已经存在的key对应的值 就地修改 d.update(red=1) d.update((('red',2),)) d.update({'red':3})
1.5字典的删除
pop(key[, default]) key存在,移除它,并返回它的value key不存在,返回给定的default default未设置,key不存在则抛出KeyError异常 popitem() 移除并返回一个任意的键值对 字典为empty,抛出KeyError异常 clear() 清空字典
1.6字典的遍历:
1.遍历key for k in d: print(k) for k in d.keys(): print(k)
2.遍历value for k in d: print(d[k]) for v in d.values(): print(v) for k in d.keys(): print(d[k])
3.遍历kv对 for item in d.items(): print(item) for item in d.items(): print(item[0],item[1]) for k,v in d.items(): print(k,v)
Python3中,keys、values、items方法返回一个类似一个生成器的可迭代对象,不会把函数的返回结 果复制到内存中 Dictionary view对象 字典的entry的动态的视图,字典变化,视图将反映出这些变化
1.6.1正确的遍历(for循环迭代字典的时候,不能操作此字典)
d = dict(a=1,b=2,c='abc) for k,v in d.items(): d.pop(k) #异常
d = dict(a=1, b=2, c='abc') keys = [] for k,v in d.items(): if isinstance(v, str): keys.append(k) for k in keys: d.pop(k) print(d)
1.7字典的key
key的要求和set的元素要求一致 set的元素可以就是看做key,set可以看做dict的简化版 hashable 可哈希才可以作为key,可以使用hash()测试
1.8defaultdict
collections.defaultdict([default_factory[, ...]]) 第一个参数是default_factory,缺省是None,它提供一个初始化函数。当key不存在的时候,会调用 这个工厂函数来生成key对应的value
from collections import defaultdict import random d1 = defaultdict(list) for k in 'abcdef': for i in range(random.randint(1,5)): d1[k].append(i) print(d1)
#不到入defaultdict模块时的操作
import random d1 = {}
for k in 'abcdef': for i in range(random.randint(1,5)): if k not in d1.keys(): d1[k] = [] d1[k].append(i) print(d1)
1.9OrderedDict
collections.OrderedDict([items]) key并不是按照加入的顺序排列,可以使用OrderedDict记录顺序 应用场景: 假如使用字典记录了N个产品,这些产品使用ID由小到大加入到字典中 除了使用字典检索的遍历,有时候需要取出ID,但是希望是按照输入的顺序,因为输入顺序是有序的 否则还需要重新把遍历到的值排序