字典
字典
字典的简单介绍
字典(dict)是python中唯一的一个映射类型.他是以{ }括起来的键值对组成.
在dict中key是唯一的.在保存的时候, 根据key来计算出一个内存地址. 然后将key-value保存在这个地址中.
这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key必须是可hash的, 如果你搞不懂什么是可哈希, 暂时可以这样记,
可以改变的都是不可哈希的, 那么可哈希就意味着不可变. 这个是为了能准确的计算内存地址⽽规定的.
已知的可哈希(不可变)的数据类型: int, str, tuple, bool 不可哈希(可变)的数据类型: list, dict, set
语法:{'key1':1,'key2':2}
注意: key必须是不可变(可哈希)的. value没有要求.可以保存任意类型的数据
# 键: 不可变数据,可哈希是不可变,不可哈希是可变不能重复
# 值: 随意
合法的:
dic={'a':123,'c':'asd',123:12,'曹操':'很熟'}
print(dic['a'])
print(dic[123])
print(dic['曹操'])
print(dic) 结果: {'a': 123, 'c': 'asd', 123: 12, '曹操': '很熟'}
增加:
# 字典: dic={'a':123,'c':'asd',123:12,'曹操':'很熟'} dic['wa'] = 'zz' 第一种指定键值进行增加,此时若是有键值就进行覆盖,若是没有就进行添加 dic.setdefault(2,3) dic.setdefault('帅哥') dic.setdefault('帅哥','美女') #当setdefault中第一个参数存在这个字典中就不进行添加操作,否则就添加
dict = {}
dict = dict.fromkeys([1,2,3,4,5],[1,2,3])
print(dict)
答:
# {1: [1, 2, 3], 2: [1, 2, 3], 3: [1, 2, 3], 4: [1, 2, 3], 5: [1, 2, 3]}
# #第一个参数是键 要是可迭代的对象
# #第二个参数是值, 值是无所谓 是因为创建的新字典的值用的都是一个 值是一个可变数据类型
# 字典:
dic={'a':123,'曹操':'很熟'}
a = dic.setdefault(2,3)
print(a)
print(dic)
结果: 3 {'a': 123, '曹操': '很熟', 2: 3}
删除:
dict = {'a':1,'c':2,'lo':2,'sa':'sj'} dict.pop('键','找不到时的提示语句') #通过键删除, pop删除有返回值,返回的是被删的值 dict.pop('a')
答: {'c': 2, 'lo': 2, 'sa': 'sj'} dict.remove ###### 没有 dict.popitem() # 随机删除 在3.6 默认删除最后一个 返回值是一个元祖 删除的键值对 答: {'a': 1, 'c': 2, 'lo': 2} del dict # 删除整个字典 答: <class 'dict'> del dict['键'] # 通过键删除 del dict['c']
答: {'a': 1, 'lo': 2, 'sa': 'sj'} dict.clear() # 清空
答: {} print(dict)
修改:
dict = {'a':1,'c':2,'lo':2,'sa':'sj'} # dict.update() #在括号里级别高于update前面的 dict.update({'obq':123,'a':999}) print(dict) #当update中的字典里没有dic中键值对就添加到dic字典中,如果有就修改里边的对应的值 答: {'a': 999, 'c': 2, 'lo': 2, 'sa': 'sj', 'obq': 123} # dict['键'] = '值' #只有在字典中才是修改 , 没有在字典中就是增 dict['a'] =2 print(dict) 答: {'a': 2, 'c': 2, 'lo': 2, 'sa': 'sj'}
查找:
dict = {'a':1,'c':2,'lo':2,'sa':'sj'} # print(dict['键']) #通过健来查看,如果这个健不在这个字典中.就会报错 print(dict['a']) 答: 1 # print(dict.get('键','查找不到的提示语句')) # 我们可以在get查找的时候自己定义返回的结果 print(dict.get('lu','找不到')) 答: 找不到 # dict.setdefault('键') #查 print(dict.setdefault('a')) 答: 1
其他操作:
# keys # 所有的键 高仿列表
# values # 所有的值 高仿列表
# items # 所以的键值 元祖形式
print(dic2.keys()) # 高仿列表 dict_keys(['33', '66']) 不能使用下标 print(dict.keys()) 答: dict_keys(['a', 'c', 'lo', 'sa']) print(dic2.values()) # 高仿列表 dict_values(['gg', 'pp']) 不能使用下标 print(dict.values()) dict_values([1, 2, 2, 'sj']) print(dict.items()) 答: dict_items([('a', 1), ('c', 2), ('lo', 2), ('sa', 'sj')])
练习:
a.请循环输出所有的key
b.请循环输出所有的value
c. 请循环输出所有的key和value
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]} for i in dic: print(i) 答案: k1 k2 k3 for i in dic.keys(): print(dic[i]) 答案: k1 k2 k3
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]} for i in dic: print(dic[i]) 答案: v1 v2 [11, 22, 33] for i in dic.values(): print(i) 答案: v1 v2 [11, 22, 33]
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]} for i in dic.items(): print(i) 答案: ('k1', 'v1') ('k2', 'v2') ('k3', [11, 22, 33])
解构:
a,b,c = 1,2,3 # 1,2,3 True,False,True '456' [7,8,9] (7,8,9) {'1':8,'2':9,'3':0} print(a) print(b) print(c)
字典的嵌套:
查找思想和列表一样,只要是{开头 }结尾的就是一体
字典删除元素 # 字典for的不能被修改
dic = {'1':22,'5':'22'} lst = [] for i in dic: lst.append(i) # 每个字典的键 for j in lst: dic.pop(j) print(dic)
无法删除的
dic = {'1':22,'5':'22'} for i in dic: dic['6'] = 1 print(dic)答:
File "D:/pyhton课件/day6/代码和笔记/04 内容详解.py", line 83, in <module>
for i in dic:
RuntimeError: dictionary changed size during iteration
posted on 2019-01-03 13:52 🐳️南栀倾寒🐳️ 阅读(125) 评论(0) 编辑 收藏 举报