字典

# 存储数据 字典的查找快一些
# 不可哈希的,就是可变的数据 可变的数据不能哈希  不可变的数据能哈希

# python3.6 版本以上  字典默认是有序的, 咱们怎么写的就怎么打印出来
# 但是 出去和别人说的时候,字典是无序的    3.5 测试


# 字典的键:  不可变数据类型   键不能重复,重复的话就会把值覆盖
# 字典的值:  可以随意字典通过键去查找值
dic["***"]
#增:
dic[11]='小米'
dic.setdefault(11,'华为')
1.先去字典中通过11这个键去查有没有值 就是None
2如果是值 就不进行添加
3.如果是None,就添加  返回的是添加的值
 
#删
del dic 删除整个字典
del dic[1] 通过键删除
dic.pop("25")pop方法可以更改它失败时的默认返回值
dic.clear()
dic.popitem()  #随机删除   python3.6删除最后一个  3.5中随机删除
 
#改:
dic1={"33":'jj','44':'tt'}
dic2={"33":'gg',"66":"22"}
#dic1.update(dic2)
#更新  被更新的内容如果在要更新的内容中那值就会被覆盖
#两个字典中,都没有一样的就是合并
#print(dic2)
dic2['33'] = 'tsp'字典没有叫增有的话叫改
 
#查
print(dic2[2]) #通过键查找  如果不存在就报错
print(dic2.get(2))  #通过键查找  如果不存在就不会报错,返回None,get方法可以更改none为其他语句
# print(dic2.setdefault('33'))   # 不存在返回None
# 其他操作:
# for i in dic2:
#     print(i)# for i in dic2:
#     print(dic2.get(i))# for i in dic2.keys():
#     print(i)# for i  in dic2.values():
#     print(i)

# for i in dic2.items():
#     print(i)

# for i in dic2:
#     print(i,dic2[i])

# print(dic2.keys())   # 高仿列表 dict_keys(['33', '66'])  不能使用下标
# print(dic2.values())   # 高仿列表 dict_values(['gg', 'pp'])  不能使用下标# 解构
有对应值都可以解构
# 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)# 面试题:

# a = 10
# b = 20
# a,b = b,a      # 10000%
# print(b)  # 10
# print(a)  # 20# for k,v in dic2.items():   # k,v =  ('33','gg')
#    print(k)
#    print(v)

# keys()   # 获取所有的键   高仿列表
#
# values()  # 获取所有的值   高仿列表
#
# item()   # 获取键值  以元祖的形式显示# print(dic2.keys())   # 高仿列表 dict_keys(['33', '66'])  不能使用下标
# print(dic2.values())   # 高仿列表 dict_values(['gg', 'pp'])  不能使用下标###############################这是坑##############################################
这个方法可以快速创建一个字典
# dic3 = dict.fromkeys([1,2,3,4,5,6,7,8,9,0],[1,2,3])
# #第一个参数是键 要是可迭代的对象
# #第二个参数是值, 值是无所谓   是因为创建的新字典的值用的都是一个  值是一个可变数据类型(可变数据类型大家指向的是同一个地址)
# print(dic3)
# dic3[3].append(9)
# print(dic3)

##################################################################################字典的嵌套:

# dic = {'汪峰':{'光头强':'电锯',
#              '葛慧倩':'熊大',
#              '国际章':'熊二'},
#        '陈冠希':{'张柏芝':'喜剧之王',
#               '阿娇':'千机变'},
#        '韦小宝':{'建宁':'公主',
#               '龙儿':'教主夫人',
#               '双儿':{'大双':'榴莲','小双':'椰子'},
#               '阿珂':'刺客'}}
# dic1 = dic['陈冠希']['阿娇']
# print(dic1)
# print(dic['韦小宝']['双儿'])
# print(dic['韦小宝']['双儿']['小双'])# 集合:

# set  集合   存储数据    天然去重  无序 不能是用下标(集合只要用处去除列表重复值)
# se = {1,2,3,4,52,234,12,21,12,123,1,11,2,3,1,2,3,21}    # 列表有点 没有值得字典
# print(se)

# 面试题

# lst = [1,2,3,4,12,3,4]
# print(list(set(lst)))

# for i in {1,2,3,4}:
# #     print(i)



# se.add(6)
# # #
# # # print(se)
# # #
# # # se.update([1,23,34])   # 可迭代对象
# # # print(se)


# se.clear()
# se = {1,2,3,4}
# print(se.pop())
#
# se.remove(4)   # 通过内容删除
# print(se)

# s1 = {"刘能", "赵四", "皮歌藏"}
# s2 = {"刘科长", "冯乡长", "皮歌藏"}

# print(s1 & s2)  # 俩个都有的
# print(s1 | s2)  # 两个合并
# print(s1 - s2)  # 不显示共有的
# print(s1 ^ s2)  # 显示不共有的

# print(s1 < s2)
# print(s1 > s2)

# dic = {{1,2}:'你好'}
# print(dic)冻结的集合可以当key值
# s1 = frozenset(['冯乡长', '刘能', '赵四', '刘科长'])
# print(s1)
#
# dic = {s1:'你好'}
# print(dic)


# print(dic.fromkeys('1','nihao'))


# dic = {}
# # dic.setdefault('123','nihao')
# # print(dic) 
一道我认为做法很巧妙的题
输出{"上海":1.......}
cars = ['鲁A32444','鲁B12333','京B8989M','黑C49678',
        '黑C46555','沪B25041']
locals = {'沪':'上海','黑':'黑龙江','鲁':'山东',
          '鄂':'湖北'}

dic = {}
for em in cars:
    if em[0] in locals:
        dic[locals[em[0]]] = dic.get(locals[em[0]],0) + 1#我第一次取的时候dic字典是空的无法取到值返回的是零,第二次的时候重复就取到了输出他的key进行+1
print(dic)

本题巧妙的使用了get这个方法对新的字典进行操作完成了巧妙的完成了自加操作