字典

字典

字典的简单介绍

  字典(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
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
循环输出所有的key
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]
请循环输出所有的value
dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
for i in dic.items():
     print(i)
答案:
('k1', 'v1')
('k2', 'v2')
('k3', [11, 22, 33])
请循环输出所有的key和value

 

 

 

 

解构:

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  &#128051;️南栀倾寒&#128051;️  阅读(125)  评论(0编辑  收藏  举报

导航