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,但是希望是按照输入的顺序,因为输入顺序是有序的
否则还需要重新把遍历到的值排序