字典dict
- key value 键值对的数据集合
- 可变的、无序的、key不重复
字典dict定义 初始化
- d = dict() 或者 d = {}
- dict(**kwargs) 使用name=value对初始化一个字典
- dict(iterable,**kwarg) 使用可迭代对象和name= value对构造字典,不过可迭代对象的元素必须是一个二元结构 d = dict((1:'a'),(2:'b'))
- dict(mapping,**kwarg) 使用一个字典构建另一个字典
- d = {'a':10,'b':20,'c':None,'d':[1,2,3]}
- 类方法dict.fromkeys(iterable,value) d = dict.fromkeys(5) 或者 d = dict.fromkeys(5,0)
字典元素访问
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
字典增加和修改
d[key] = value
- 将key对应的值修改为value
- key不存在添加新的kv对
update([other]) -> None
- 使用另一个字典的kv对更新本字典
- key不存在,就添加
- key存在,覆盖已经存在的key对应的值
- 就地修改
d = {} d.update(red=1) d.update((('red',2),)) d.update({'red':3}) d
字典删除
pop(key[,default])
- key存在,移除他,并返回他的value
- key不存在,返回给定的default
- default未设置,key不存在则抛出KeyError异常
popitem()
- 移除并返回一个任意的键值对
- 字典为empty,抛出KeyError异常
clear()
- 清空字典
del语句
a = True b = [6] d = {'a': 1, 'b': b, 'c': [1,3,5]} del a del d['c'] # 删除了一个对象[1,3,5]? del b[0] #根据索引删除 c=b del c del b b = d['b']
- del a['c']看着像删除了一个对象,本质上减少了一次对象的引用,del实际上删除的是名称,而不是对象
字典遍历
for ... in dict
遍历key
for k in d: print(k) for k in d.keys(): print(k)
遍历value
for k in d: print(d[k]) for k in d.keys(): print(d.get(k)) for v in d.values(): print(v)
遍历item,既kv对
for item in d.items(): print(item) for item in d.items(): print(item[0],time[1]) for k,v in d.items(): print(k,v) for k,_ in d.items(): print(k) for _,v in d.items(): print(v)
python3中,keys、values、items方法返回一个类似一个生成器的可迭代对象,不会把函数的返回结果复制到内存中
- Dictionary view对象,可以使用len()、iter()、in操作
- 字典的entry的动态试图,字典变化,试图将反映出这些变化
- keys返回一个类set对象,也就是可以看做一个set集合。如果values都可以hash,那么items也可以看做是set对象
字典的遍历和移除
如何在遍历的时候移除元素
错误的做法
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') while len(d): #相当于清楚,不如clear print(d.popitem()) d = dict(a=1,b=2,c='abc') while d: print(d.popitem())
正确的做法
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)
字典的key
key的要求和set的元素要求一致
- set的元素可以就是看做key,set可以看做dict的简化版
- hashable 可哈希才可以作为key,可以使用hash()测试
- d = {1 : 0, 2.0 : 3, "abc" : None, ('hello', 'world', 'python') : "string", b'abc' : '135'}