字典的增删查改

字典

字典是无序的,不可变数据类型

定义: 用于存储数据,存储大量数据 字典要比列表快,将数据和数据之间进行关联

定义一个字典

dic = {"常鑫":10,"李文虎":80,"张宇":90,10:"大黑哥"}

字典中逗号分隔是一个元素 "常鑫" (键) : 10 (值) 键值对应

字典的键

  1. 必须是可哈希的—— 不可变的数据类型(列表不可以)——避免哈希冲突,使用了开放寻址法

2.不可哈希———可变的数据类型

3.要求唯一,如果有重复的后面的将前面的值覆盖

  • 字典的值可以任意

    (通过键去查)

    1.暴力添加

dic = {"有":[1,2,3]}
dic["李文虎"] = 89    结果:{'有': [1, 2, 3], '李文虎': 89}

  • 李文虎这个键去字典进行查询,如果不存在执行添加,如果存在就不添加了
有:
dic = {"有":[1,2,3],"李文虎":89}
dic.setdefault("李文虎",100)     结果:  dic = {"有":[1,2,3],"李文虎":89}

没有:
dic = {"有":[1,2,3],}
dic.setdefault("李文虎",100)     结果:{'有': [1, 2, 3], '李文虎': 100}

  1. dic.setdefault()
dic = {"有":[1,2,3],"李文虎":89}
 print(dic.setdefault("李文虎"))
#结果 89   

只有两种格式  

还有 None
print(dic.setdefault("张宇")
# None

删除

通过字典 的删除值对

  • del dic["键"]
dic = {"有":[1,2,3],"李文虎":89}
del dic["有"]
print(dic)

#结果     {'李文虎': 89}
  • dic.pop("键")

    dic = {"有":[1,2,3],"李文虎":89}
    dic.pop("有")
    print(dic)
    # 结果  {'李文虎': 89}
    

dic.clear

dic = {"有":[1,2,3],"李文虎":89}
dic.clear()
print(dic)


# {}

当键在字典中存在就是修改(暴力修改)

dic = {"有":[1,2,3],"李文虎":89}
dic["有"] = "dsb"
print(dic)


# {'有': 'dsb', '李文虎': 89}

字典中没有某个键时就是添加

dic = {"有":[1,2,3],"李文虎":89}
dic["无"] = "dsb"
print(dic)
# {'有': [1, 2, 3], '李文虎': 89, '无': 'dsb'}

dic.update("要更新的字典")

括号里的级别高于 update 前面的字典 更新顾名思义就是将补充的填充到原来上面

D = {'one': 1, 'two': 2}

D.update({'three': 3, 'four': 4})  # 传一个字典
print(D)

D.update([('seven', 7), ('eight', 8)])  # 传一个包含一个或多个元祖的列表
print(D)



#{'one': 1, 'two': 2, 'three': 3, 'four': 4}
{'one': 1, 'two': 2, 'three': 3, 'four': 4, 'seven': 7, 'eight': 8}

  1. 利用 for 循环 (循环获取的每个字典中对应的键)

  2. dic = {"有":[1,2,3],"李文虎":89}
    for i in dic:
        print(i)
    
    #
    有
    李文虎
    

dic.get()

dic = {"有":[1,2,3],"李文虎":89}
print(dic.get("李文虎"))          #通过键获取值,存在返回键中对应的值
# 89
dic = {"有":[1,2,3],"李文虎":89}
print(dic.get("无"))             #不存在返回 None
# None

dic.get[]

存在的话和上面的()一样,如果不存在就会报错

其他操作

dic.keys() 获取所有键,存放在高仿列表中,支持 for 循环,不支持索引.

dic = {"有":[1,2,3],"李文虎":89}
print(dic.keys())

#  结果:  dict_keys(['有', '李文虎'])

支持 for 循环

dic = {"有":[1,2,3],"李文虎":89}
for i in dic.keys():
    print(i)

结果:
有
李文虎    类似于输出列表中的元素,  字典也可以

不支持索引 直接报错

dic = {"有":[1,2,3],"李文虎":89}
print(dic.keys()[0])


结果报错

dic.values() 获取字典中所有的值

dic = {"有":[1,2,3],"李文虎":89}
print(dic.values())


#dict_values([[1, 2, 3], 89])

dic.items() 获取字典中所有键和值

dic = {"有":[1,2,3],"李文虎":89}
print(dic.items())


#dict_items([('有', [1, 2, 3]), ('李文虎', 89)])

解构

a,b = 10,12
print(a)
print(b)   #相当于一个元组  
#
10
12
a = 10
b = 20
a,b = b,a
print(a)
print(b)
#
20
10
列表
a, b = [1,2]
print(a)
print(b)

#
1
2
元组
a, b = (1,2)
print(a)
print(b)          #等号前面的值要和等号后面的变量名要一一对应,不能多也不能少

#
1
2
字典
a,b = {"1":"a","2":"b"}
print(a)
print(b)
#
1
2
dic = {"1":"a","2":"b"}
for k,v in dic.items():
    print(k,v)

#1 a
2 b       循环获取字典中的每一个键和值

字典的嵌套

通过键一步一步查询

dic = {1001:["周杰伦","林俊杰"],
       1002:{"汪峰":{"前妻1":["大烧饼"],"前妻2":["熊大","熊二"],"国际章":"肉丝"}},
       1003:{"陈冠希":["阿娇","阿萨","张柏芝"]},
       1004:{"韦小宝":[{"教主夫人":["教主"]},
                    {"阿珂":"刺客"},
                    {"双儿":"天地会"},
                    {"爱心觉罗建宁":"公主"},
                    {"独臂神尼":{"韦小宝师父":{"兰陵王":"隐身"},"花木兰":[
                           "唧唧复唧唧","木兰是战士",{"爸爸":["花和尚"]}]
                             }},
                    {"陈圆圆":"丈母娘"},{"穆建平":"小郡主"}]},
       1005:{"常鑫":["大黑哥","大烧饼","吃大煎饼","肉夹馍","自行车","井盖",]}
       }

print(dic[1005]["常鑫"][-1])
print(dic[1002]["汪峰"]["前妻2"][-1])
print(dic[1004]["韦小宝"][4]["独臂神尼"]["韦小宝师父"]["兰陵王"])
print(dic[1004]["韦小宝"][4]["独臂神尼"]["花木兰"][2]["爸爸"][0])


#
井盖
熊二
隐身
花和尚
posted @ 2019-07-10 15:58  挂机兄  阅读(303)  评论(0编辑  收藏  举报