''' 概述: 类似java中的map 使用键值对(key-value)存储,具有极快的查找速度 1、字典中的key必须唯一,不唯一时,只有一个有效且随机 2、key必须是不可变对象 3、字符串、整数等都是不可变的,可以作为key 4、list可变,不能作为key,列表和字典不能作为key 布尔能作为key,但是有可能会和0,1重复 5、字典是无序的 (不能使用角标),每次print都不一样 ''' from collections import defaultdict from collections import OrderedDict from collections import Counter dict1 = {'Tom':40,'Pat':49,'lilei':68} # 元素的访问 # 获取:字典[key] 没有key会报错 print(dict1['Tom']) # get(key[,val])根据键取值,更好,键不存在时不会报错,且第二个参数为返回值,默认None print(dict1.get('Pat')) # setdefault(key,value) 设置默认键值,如果字典中有键值对时,保持原来的状态,参数中的值作废,没有则添加新的键值对 # 而且不可同过该方法修改(默认)值 dict1.setdefault('luowenlong',65) print(dict1) # defaultdict(func) 用于创建值为默认(/指定)数据类型的空字典,参数为具有返回值的函数,可自行追加没有的键 # 例如默认为int型时,没有的键,初始值为0(只是默认);其他的数据类型也可以作为值(value类型仍可修改) dictA=defaultdict(int) dictA['a']=1 dictA['b']=2 print(dictA) print(dictA['c']) # dict.fromkeys([],value) 根据列表中的元素为key,第二个参数为value,创建多个同值不同键的字典元素 dic =dict.fromkeys(['fajo','jfoi',456],234) print(dic) # 添加 dict1['hanmeimei']=99 # 因为一个key对应一个value,所以,多次对一个key的value赋值,其实就是改值 dict1['lilei']=80 print(dict1) # update()合并字典,如果合并时键重了,则键对应的值会被覆盖 dict3={"a":1,'b':2} dict4={'c':3,'d':4} dict3.update(dict4) # 无返回值,不能进行赋值,否则为None dict3.update(e=5) # 也能添加成功 print(dict3) # 删除 # pop(key) del(key) 删除key所在的键值对信息,但是pop()会返回删除的键所对应的值 # popitem() 随机删除一个数据,应返回被删除的数据 # dict.del('Pat') f=dict1.pop('Pat') print(dict1) print(f) # clear()清除所有元素 # del dict[key] # 遍历 for key in dict1: print(key,dict1[key]) # keys() 返回以指定字典的键为元素的列表dict_keys([……]) # values() 返回以指定字典的值为元素的列表dict_values([……]) for value in dict1.values(): print(value) print(dict1.values()) # items() 返回以指定字典的每一对键值对作为一个元组然后作为元素的列表,数据类型为:dict_items for k,v in dict1.items(): print(k,v) print(dict1.items()) # 字典虽是无序的,但可有序遍历 # (1)按键的添加的顺序返回,但是其物理地址是无序的 for i,v2 in enumerate(dict1,1): # 序号+key,第二个参数是角标的起始数字,默认为0 print(i,v2) print(id(i),id(v2)) print(enumerate(dict1)) for i,v in enumerate(dict1.items()): # 序号+(key,value) print(i,v) # (2)按键的添加的顺序返回 dictF = OrderedDict([('face',100),('money',10000),('color','red'),('foot','chicken')]) for i in dictF: print(i) # dict可以将任何包含双值子序列的序列转换成字典 a = dict([[1,2],[3,4],[5,6]]) print(a) b=dict(([1,2],[3,4],[5,6])) print(b) c=dict(['ab','cd','ef']) print(c) d=dict(('ab','cd','ef')) print(d) ''' # zip()并行迭代 且zip会在最短序列用完时停止 listA=[1,2,3,4] tupleB=('11','22','33') for li,tu in zip(listA,tupleB): print(li,tu) ''' # zip可以将两个任意序列进行匹配,调用dict可以转成字典 listA=[1,2,3,4] tupleB=('11','22','33','44') C=zip(listA,tupleB) dictD=dict(C) print(C) print(list(C)) # 空 print(dictD) ''' dict和list比较 dict: 1、查找和插入的速度极快,不会随着key-value 的增加而变慢 2、需要占用大量的内存,内存浪费 list; 1、查找和插入的速度会随着数据量的增加而变慢 2、占用空间小,浪费内存少 ''' ''' 对一段英文进行处理,将每个单词及其个数存入字典: 1、以空格切割字符串 2、循环处理列表中的每个元素 3、以元素当做key在字典中提取数据 4、如果没有提取到,就以该元素作为key,1作为value存进字典 5、如果提取到,将对应的key修改,值加1 6、根据输入的字符串当做key再去字典中取值 ''' dict2={} # 存的是单词及其对应的个数 str = '''I am a good man! I am a nice man! I am a good boy! I am a nice boy! I am a handsome man!I am a good man! I am a good guy!''' l= str.split(' ') for v in l: c = dict2.get(v) if c == None: dict2[v] = 1 else : dict2[v]+=1 print(dict2) ''' 利用Counter(list)可以统计可重复序列中各元素的个数,以Conuter('字典')形式返回 方法: most_commn([num]) 降序排列返回元组,如果给一个数字,则返回排序后以此数为角标的元组之前的元组元素 ''' list1=[1,1,1,1,1,3,4,5,4,2,2,5,6,3,4,2,1] count = Counter(list1) print(count) print(count.most_common()) print(count.most_common(2))
python基础—dict
最新推荐文章于 2024-07-29 21:16:24 发布