博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python全栈_011_Python3基本数据类型--字典
阅读量:6157 次
发布时间:2019-06-21

本文共 5978 字,大约阅读时间需要 19 分钟。

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值存在,那么会替换掉原来的valueprint(dic)    # 输出  {'刘德华': '马桶', '王宝强': '士兵突击'}# 2:setdefault(),如果不存在就添加,返回value值;如存在就不做增加处理,返回原来的value值value = dic.setdefault('黄秋生', '头文字D')print(value)  # 头文字Dprint(dic)    # {'刘德华': '马桶', '王宝强': '士兵突击', '黄秋生': '头文字D'}value = dic.setdefault('黄秋生', '无间道')  # 如果存在了key,不会执行增加操作,print(value)  # 头文字Dprint(dic)    # {'刘德华': '马桶', '王宝强': '士兵突击', '黄秋生': '头文字D'}

2.2:删除

# 1: pop,指定 key值删除# dic.pop("a",'无key默认返回值') # pop根据key删除键值对,并返回对应的值,如果没有key则返回默认返回值dic = {
"黄日华": "天龙八部", "苏有朋": "倚天屠龙记", "王宝强": "天下无贼" }value = dic.pop('王宝强') # key存在,并返回key对应的valueprint(value) # 天下无贼print(dic) # {'黄日华': '天龙八部', '苏有朋': '倚天屠龙记'}dic = {
"黄日华": "天龙八部", "苏有朋": "倚天屠龙记", "王宝强": "天下无贼" }# dic.pop('刘德华') # key值不存在,这样删除会报错, KeyError: '刘德华'# 删除时指定默认的返回值value = dic.pop('刘德华',None) # 这样删除不会报错print(value) # Noneprint(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:最直观。直接用keyprint(dic['苏有朋']) # 没有key值会报错#print(dic['苏有朋3']) # KeyError: '苏有朋3'#2:get方法,不存在返回Noneprint(dic.get('黄日华'))print(dic.get('黄日华2')) # 不存在返回 Noneprint(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访问valuefor key in dic.keys(): print(key, dic[key])print('-2-values:' + '-'*30)print(dic.values())# 遍历valuefor 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'] + 10print(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)

 

 

转载于:https://www.cnblogs.com/ixuby/p/10118641.html

你可能感兴趣的文章
java多线程 -- 同步鎖
查看>>
Qt学习之路(28): 坐标变换
查看>>
Redhat系统下三种主要的软件包安装方法
查看>>
3.5. Buttons
查看>>
回溯法求解N皇后问题(Java实现)
查看>>
centos iptables
查看>>
Waymo冰火两重天:无人出租车最快今秋推出,高管团队嫌隙严重
查看>>
XML与CSS结合
查看>>
Lesson 1:单线程 Socket Communications(一)
查看>>
来自凌辉的祝福
查看>>
sql 查询模块
查看>>
教学思路C#之入门一 认识简单的C#结构
查看>>
自定义hive url parse函数
查看>>
.NET多线程编程(7)——C#多线程编程传递参数解决方案
查看>>
论“前置测试模型”-1 概念篇
查看>>
微软私有云分享(R2)16PowerShell查看虚拟机信息
查看>>
(运维)VMware-vCenter-Server-update Management
查看>>
.NET平台开发必须掌握的XML知识(二)
查看>>
闲谈“个人核心竞争力”与“危机感” !!!
查看>>
extmail垃圾邮件存放垃圾邮件箱
查看>>