python全栈_011_Python3基本数据类型--字典
Posted ixuby
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python全栈_011_Python3基本数据类型--字典相关的知识,希望对你有一定的参考价值。
1:什么是字典?:
dict,以{} 来表示,使用逗号来隔开,内部元素使用key:value的形式来保存数据,key必须是不可变的数据类型,value可以是任何类型的数据类型。
已知不可变的数据类型:int,str,bool,tuple
可变的数据类型: list,dict,set
语法:
{key1:value1,key2:value2,key3:value1.......}
(注意:key必须是不可变数据类型)
# 合法 dic = {1234: 789, ‘jj‘: ‘林俊杰‘, True: 300, ‘jay‘: ‘周杰伦‘, (1,2,3): ‘hello‘} # 这样是可以的 print(dic[1234]) print(dic[‘jj‘]) print(dic[True]) print(dic[(1,2,3)]) # 不合法的 # dic = {1234: 456,[1,2]: ‘list‘} # list 是可变的,不能作为key;TypeError: unhashable type: ‘list‘ #dic = {1234: 456,{1:2}: ‘dict‘} # dict 是可变的,不能作为key;TypeError: unhashable type: ‘dict‘ dic = {1234: 456,{1,2}: ‘set‘} # set 是可变的,不能作为key;TypeError: unhashable type: ‘set‘
2:字典的增删改查:
2.1:增加
dic = {} # 或者 dic = dict() # 1: 直接用key 往里面存数据即可, # 如果不存在key值就添加,如果存在就更新key对应的值; dic[‘刘德华‘] = ‘马桶‘ # 直接用key 往里面存数据即可 dic[‘王宝强‘] = ‘天下无贼‘ print(dic) # 输出 {‘刘德华‘: ‘马桶‘, ‘王宝强‘: ‘天下无贼‘} dic[‘王宝强‘] = ‘士兵突击‘ # 如果key值存在,那么会替换掉原来的value print(dic) # 输出 {‘刘德华‘: ‘马桶‘, ‘王宝强‘: ‘士兵突击‘} # 2:setdefault(),如果不存在就添加,返回value值;如存在就不做增加处理,返回原来的value值 value = dic.setdefault(‘黄秋生‘, ‘头文字D‘) print(value) # 头文字D print(dic) # {‘刘德华‘: ‘马桶‘, ‘王宝强‘: ‘士兵突击‘, ‘黄秋生‘: ‘头文字D‘} value = dic.setdefault(‘黄秋生‘, ‘无间道‘) # 如果存在了key,不会执行增加操作, print(value) # 头文字D print(dic) # {‘刘德华‘: ‘马桶‘, ‘王宝强‘: ‘士兵突击‘, ‘黄秋生‘: ‘头文字D‘}
2.2:删除
# 1: pop,指定 key值删除 # dic.pop("a",‘无key默认返回值‘) # pop根据key删除键值对,并返回对应的值,如果没有key则返回默认返回值 dic = {"黄日华": "天龙八部", "苏有朋": "倚天屠龙记", "王宝强": "天下无贼" } value = dic.pop(‘王宝强‘) # key存在,并返回key对应的value print(value) # 天下无贼 print(dic) # {‘黄日华‘: ‘天龙八部‘, ‘苏有朋‘: ‘倚天屠龙记‘} dic = {"黄日华": "天龙八部", "苏有朋": "倚天屠龙记", "王宝强": "天下无贼" } # dic.pop(‘刘德华‘) # key值不存在,这样删除会报错, KeyError: ‘刘德华‘ # 删除时指定默认的返回值 value = dic.pop(‘刘德华‘,None) # 这样删除不会报错 print(value) # None print(dic) # {‘黄日华‘: ‘天龙八部‘, ‘苏有朋‘: ‘倚天屠龙记‘, ‘王宝强‘: ‘天下无贼‘} # 2: popitem() 随机删除 dic = {"黄日华": "天龙八部", "苏有朋": "倚天屠龙记", "王宝强": "天下无贼" } dic.popitem() # 随机删除 print(dic) # 3: del,key值需要存在,不然会报错 dic = {"黄日华": "天龙八部", "苏有朋": "倚天屠龙记", "王宝强": "天下无贼" } del dic[‘苏有朋‘] # 删除存在的key值, print(dic) #del dic[‘苏有朋‘] # 删除不存在的key,报错, KeyError: ‘苏有朋‘ #print(dic) # 4:clear() 清空字典 dic = {"黄日华": "天龙八部", "苏有朋": "倚天屠龙记", "王宝强": "天下无贼" } dic.clear() # 清空字典 print(dic)
2.3:修改
# 更新(修改): dic = {"黄日华": "天龙八部", "苏有朋": "倚天屠龙记", "刘德华": "马桶", "王宝强": "天下无贼" } dic[‘刘德华‘] = ‘无间道‘ # key不存在就添加,key存在就更新 dic2 = {‘刘能‘: ‘大阳哥‘, ‘王宝强‘: ‘士兵突击‘} dic.update(dic2) # 将dic2所有的键值对覆盖添加(相同的覆盖,没有的添加)到dic中 print(dic) print(dic2)
2.4:查询(访问)
# 查询 dic = {‘黄日华‘: ‘天龙八部‘, ‘苏有朋‘: ‘倚天屠龙记‘, ‘刘德华‘: ‘无间道‘, ‘王宝强‘: ‘士兵突击‘, ‘刘能‘: ‘大阳哥‘} #1:最直观。直接用key print(dic[‘苏有朋‘]) # 没有key值会报错 #print(dic[‘苏有朋3‘]) # KeyError: ‘苏有朋3‘ #2:get方法,不存在返回None print(dic.get(‘黄日华‘)) print(dic.get(‘黄日华2‘)) # 不存在返回 None print(dic.get(‘黄日华3‘, ‘haha不存在‘)) # 第二个参数,不存在的时候,默认的返回值
2.5:判断某个key是否存在
dic = {‘黄日华‘: ‘天龙八部‘, ‘苏有朋‘: ‘倚天屠龙记‘, ‘刘德华‘: ‘无间道‘, ‘王宝强‘: ‘士兵突击‘, ‘刘能‘: ‘大阳哥‘} # 1:使用get方法 if dic.get(‘黄日华1‘) == None: print(‘黄日华1 不存在‘) else: print(‘黄日华1 存在‘) # 2: if ‘黄日华2‘ in dic: print(‘黄日华2 存在‘) else: print(‘黄日华2 不存在‘) if ‘黄日华3‘ in dic.keys(): print(‘黄日华3 存在‘) else: print(‘黄日华3 不存在‘)
3:字典的相关(遍历):
dic = {‘黄日华‘: ‘天龙八部‘, ‘苏有朋‘: ‘倚天屠龙记‘} # 对字典的遍历 print(‘-1-keys:‘ + ‘-‘*30) print(dic.keys()) # dict_keys([‘黄日华‘, ‘苏有朋‘]) 像列表,但不是列表 # 遍历key,并通过key访问value for key in dic.keys(): print(key, dic[key]) print(‘-2-values:‘ + ‘-‘*30) print(dic.values()) # 遍历value for value in dic.values(): print(value) print(‘-3-items:‘ + ‘-‘*30) # 也可以遍历字典 print(dic.items()) # 拿到的是 (key,value)元组 for item in dic.items(): print(item,type(item)) # item 为元组 print(item[0], item[1]) # 通过下标访问元组 item[0] 为key值,item[1]为value值 # 解构,解包 a, b = (10, 20) # 解构,解包,要求前面变量的个数,与后面解包的个数一致 print(a,b) a, b = [30, 40] # 解构,解包 ,这样也是可以的 print(a,b) for item in dic.items(): k, v = item # item 是元组,进行解包 print(k, v) # 可以直接使用下面的方式: for key, value in dic.items(): # 当需要遍历字典,在操作中涉及到key和value的时候 print(key, value) # 字典本身是一个可迭代对象,可以直接进行for循环 dic = {‘黄日华‘: ‘天龙八部‘, ‘苏有朋‘: ‘倚天屠龙记‘} # 只需要遍历key的时候,使用这种方式 for key in dic: # 拿到的是Key, dic.keys()的结果一样 print(key)
4:字典的嵌套:
wf = { ‘name‘: ‘汪峰‘, ‘age‘: 44, ‘成名曲‘: ‘春天里‘, ‘wife‘: { ‘name‘: ‘章子怡‘, ‘age‘: 39, ‘工作‘: ‘演员‘ }, ‘children‘: [ {‘num‘: ‘001‘, ‘name‘: ‘汪1‘, ‘hobby‘: ‘唱歌‘}, {‘num‘: ‘002‘, ‘name‘: ‘汪2‘, ‘hobby‘: ‘演戏‘} ] } print(wf) # wf 第二个孩子的爱好 ? print(wf[‘children‘][1][‘hobby‘]) # 输出 演戏 # wf 妻子的工作 ? print(wf[‘wife‘][‘工作‘]) # 输出 演员 # wf 的老婆 老了10岁 ? wf[‘wife‘][‘age‘] = wf[‘wife‘][‘age‘] + 10 print(wf)
5:字典内置函数&方法:
Python字典包含了以下内置函数:
序号 | 函数及描述 |
---|---|
1 | cmp(dict1, dict2) 比较两个字典元素。 |
2 | len(dict) 计算字典元素个数,即键的总数。 |
3 | str(dict) 输出字典可打印的字符串表示。 |
4 | type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型。 |
Python字典包含了以下内置方法:
序号 | 函数及描述 |
---|---|
1 | dict.clear() 删除字典内所有元素 |
2 | dict.copy() 返回一个字典的浅复制 |
3 | dict.fromkeys(seq[, val]) 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值 |
4 | dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值 |
5 | dict.has_key(key) 如果键在字典dict里返回true,否则返回false |
6 | dict.items() 以列表返回可遍历的(键, 值) 元组数组 |
7 | dict.keys() 以列表返回一个字典所有的键 |
8 | dict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default |
9 | dict.update(dict2) 把字典dict2的键/值对更新到dict里 |
10 | dict.values() 以列表返回字典中的所有值 |
11 | pop(key[,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。 |
12 | popitem() 随机返回并删除字典中的一对键和值。 |
6:for循环:
for循环:用户按照顺序循环可迭代对象的内容。
s = ‘HelloWorld‘ print(s) for i in s: print(i,end=‘,‘) print(‘‘) lst = [1,3,4,‘hi‘] for el in lst: print(el,end= ‘,‘) print(‘‘) tu = (1,4,‘中国‘,False) for el in tu: print(el,end=‘,‘) print(‘‘) dic = {‘黄日华‘: ‘天龙八部‘, ‘苏有朋‘: ‘倚天屠龙记‘} for k,v in dic.items(): print(k,v)
6:enumerate:枚举:
enumerate:枚举,对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
# enumerate:枚举,对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串), # enumerate将其组成一个索引序列,利用它可以同时获得索引和值 # enumerate(sequence, [start=0]) s = ‘HelloWorld‘ print(s) for index,value in enumerate(s): print(index,value) print(‘‘) lst = [1,3,4,‘hi‘] for index,el in enumerate(lst): print(index,el) print(‘‘) tu = (1,4,‘中国‘,False) for index,el in enumerate(tu): print(index,el)
以上是关于python全栈_011_Python3基本数据类型--字典的主要内容,如果未能解决你的问题,请参考以下文章
python全栈_009_Python3基本数据类型--列表
python3全栈开发-内置函数补充,反射,元类,__str__,__del__,exec,type,__call__方法