1、字典
1)、定义:
key—value键值对的数据集合
可变的、无序的、key不重复
2)、格式
(1)、d=dict()或者d={}
(2)、dict(**kwargs)使用name=value对初始化一个字典
(3)、dict(iterable,**kwarg) 使用可迭代对象或者name=value对构造字典,不过可迭代对象的元素必须是一个二元结果
d=dict(((1,'a'),(2,'b')))
(4)、dict(mapping,**kwarg)使用一个字典构造另一个字典
d={'a':10,'b':20,'c':None,'d':[1,2,3}}
(5)、类方法dict.fromkeys(iterable,value)
d=dict.fromkeys(range(5))
3)、字典元素的访问
(1)、d[key]:返回key对于的值value
key不存在抛出KeyError异常
(2)、get(key[,default]):返回key对应的值value
key不存在返回缺省值,即default位置的值,如果没有设置就返回None
(3)、setdefault(key[,default]):返回key对应的值value,
key不存在,添加kv对,value为default,并返回default,如果default没有设置,缺省为None
4)、字典增加和修改
(1)、d[key]=value:将key对应的值修改为value;key不存在添加新的kv对
(2)、update([other]):使用另一个字典的kv对更新本字典
key不存在就添加,存在就覆盖已经存在的key对应的值
就地修改
例如:
d2.update(d3,red=1) #将d3这个字典中的元素和‘red’:1加入进d2,相当于混合加入
d2.update({'red':3}) d.update((('red':3),))
5)、字典的删除
(1)、pop(key[,default])
key存在,移除它,并返回它的value,不存在则返回给定的default
default未设置,key不存在则抛出KeyError异常
(2)、popitem()
移除并返回一个任意的键值对;字典为空,抛出KeyError异常
(3)、clear() 清空字典
6)、defaultdict
collections.defaultdict([default_factory[,...]])
第一个参数是default_factory,缺省是None,它提供一个初始化函数。当key不存在的时候,会调用这个工厂函数来生成key对应的value
例:
from collections import defaultdict d1={} d2=defaultdict(list) for k in "wang": for v in range(5): if k not in d1.keys(): d1[k]=[] d1[k].append(v) print(d1) for k in 'wen': for v in range(3): d2[k].append(v) print(d2)
7)、OrderedDict
collections.OrderedDict([items])
key并不是按照加入的顺序排列,可以使用OrderedDict记录顺序
1 from collections import OrderedDict 2 import random 3 4 d={'bana':2,'apple':4,'orange':1,'pear':6} 5 print(d) 6 keys=list(d.keys()) 7 random.shuffle(keys) 8 print(keys) 9 oi=OrderedDict() 10 for key in keys: 11 oi[key]=d[key] 12 print(oi) 13 print(oi.keys())
#字典的练习:
1、用户输入一个数字,打印每一位数字及其重复次数:
from collections import OrderedDict x=input('>>>') od=OrderedDict() #OrderedDict()可以当作生成一个特殊的字典,即改字典的输出顺序可以指定。 for i in x: od.setdefault(i,0) #用setdefault给od赋值,没有value的赋值为0 od[i]+=1 #每一个value加1 else: for k in x: print("num={},count={}".format(k,od[k])) print(od) 结果: >>>76917 num=7,count=2 num=6,count=1 num=9,count=1 num=1,count=1 num=7,count=2 OrderedDict([('7', 2), ('6', 1), ('9', 1), ('1', 1)])
2、python数字重复的统计,随机产生100个整数,升序输出所有不同数字及其重复的次数
1 from collections import OrderedDict 2 import random 3 od=OrderedDict() 4 lst=sorted([random.randint(-1000,1000) for i in range(100)]) 5 print(lst) 6 7 for i in lst: 8 od.setdefault(i,0) 9 od[i]+=1 10 print(od)