字典

字典 -- dict

字典是无序、是可变的数据类型
字典:用于存储数据,存储大量数据 字典要比列表快、将数据和数据之间进行关联

lst1 = ["宇霖", "伊琳", "张三"]  # 姓名
lst2 = [100, 99, 59]  # 分数
print(lst1[0], lst2[0])

定义一个字典:

dic = {"宇霖": 100, "伊琳": 99, "张三": 59}
字典中逗号分隔叫做一个元素  "宇霖"(键): 100(值) -- 键值对
dic = {"宇霖": 100, "伊琳": 99, "张三": 59, 10: "李四", True: 123, (1, 2, 3): "50"}

字典的键:

要求必须是可哈希的 -- 不可变的数据类型 -- 避免哈希冲突使用了开放寻址法
不可哈希的 -- 可变的数据类型
要求唯一 -- 如果有重复的后边值将前面的值覆盖

字典的值:

可以任意

增:

dic = {"宇霖": 100}
dic["伊琳"] = 99  # 暴力添加
print(dic)

dic = {"宇霖": 100}
dic.setdefault("伊琳", 99)  # "伊琳"这个键去字典进行查询,如果不存在执行添加,如果存在就不添加
print(dic)

dic = {"宇霖": 100, "伊琳": 99}
print(dic.setdefault("伊琳"))  # 若存在返回值,若不存在返回None

删除:

dic = {"宇霖": 100, "伊琳": 99}
del dic["宇霖"]  # 通过字典的键删除键值对
print(dic)

dic = {"宇霖": 100, "伊琳": 99}
dic.pop("宇霖")  # 通过字典的键删除键值对    返回值:返回的是被删除的值
print(dic)

dic = {"宇霖": 100, "伊琳": 99}
dic.clear()  # 清空
print(dic)

改:

dic = {"宇霖": 100, "伊琳": 99}
dic["宇霖"] = "张三"  # 字典中没有某个键值对的时候就是添加,当键在字典中存在的时候就是修改
print(dic)  # 有则改,无则加

dic = {"宇霖": 100, "伊琳": 99}
dic.update({"1": 3, "5": 9, "伊琳": 100})
print(dic)

dic1 = {'宇霖': 100, '伊琳': 100, '1': 3, '5': 9}
dic1.update(dic)  # update括号中的级别高于前update前面的字典
print(dic1)

查:

dic = {"宇霖": 100, "伊琳": 99}
for i in dic:  # 循环获取的是字典中每个键值对的键
    print(i)

推荐使用get
dic = {"宇霖": 100, "伊琳": 99}
print(dic.get("宇霖"))  # 通过键获取值
dic = {"宇霖": 100, "伊琳": 99}
print(dic.get("xxx"))  # 如果键不存在字典中返回None

dic = {"宇霖": 100, "伊琳": 99}
print(dic["宇霖"])  # 通过键获取值
dic = {"宇霖": 100, "伊琳": 99}
print(dic["xxx"])  # 如果键不存在字典中 报错

其他操作:

dic = {"宇霖": 100, "伊琳": 99}
for i in dic:
    print(i, dic.get(i))  # 获取所有的键和值

dic = {"宇霖": 100, "伊琳": 99}
print(dic.keys())  # 高仿列表 -- dict_keys(['宇霖', '伊琳'])  支持for循环 不支持索引

dic = {"宇霖": 100, "伊琳": 99}
for i in dic.keys():  # keys获取字典中所有的键
    print(i)

dic = {"宇霖": 100, "伊琳": 99}
lst=[]
for i in dic:
    lst.append(dic[i])

dic = {"宇霖": 100, "伊琳": 99}
print(list(dic.values()))  # values获取字典中所有的值

dic = {"宇霖": 100, "伊琳": 99}
print(dic.items())

dic = {"宇霖": 100, "伊琳": 99}
for i in dic.items():
    print(i[0], i[1])

解构:

a, b = 10, 12
print(a)
print(b)

a = 10
b = 20
a, b = b, a
print(a)
print(b)

a, b = [1, 2]
print(a, b)

lst = [1, 2]
a = lst[0]
b = lst[1]
print(a, b)

a, b = (3, 4)
print(a, b)  # 等号后边的值和前面的变量名要一一对应

a = 10, 12  # 本质就是一个元组
print(a)

a, b = "23"
print(a, b)

a, b = {"1": "a", "2": "b"}
print(a, b)

dic = {"宇霖": 100, "伊琳": 99}
for i in dic.items():
    print(i[0], i[1])

dic = {"宇霖": 100, "伊琳": 99}
for k, v in dic.items():  # 获取每个元组的键和值
    print(k, v)

字典的嵌套:

dic = {1001: ["周杰伦", "林俊杰"],
       1002: {"汪峰": {"前妻1": ["儿子1"],
                     "前妻2": ["儿子2", "儿子3"],
                     "前妻3": "儿子4"}},
       1003: {"陈冠希": ["阿娇", "阿萨", "张柏芝"]},
       1004: {"韦小宝": [{"教主夫人": ["教主"]},
                      {"啊珂": "刺客"},
                      {"双儿": "天地会"},
                      {"爱新觉罗建宁": "建宁公主"},
                      {"独臂神尼": {"韦小宝师傅": {"兰陵王": "隐身"},
                                "花木兰": ["唧唧复唧唧", "木兰是战士", {"爸爸": ["花和尚"]}]}},
                      {"陈圆圆": "丈母娘"},
                      {"建平": "小郡主"}]},
       1005: {"宇霖": ["1", "2", "3", "4", "5", "6"]}
       }
print(dic[1004]["韦小宝"][0]["教主夫人"][0])
print(dic[1005]["宇霖"][-1])
print(dic[1002]["汪峰"]["前妻2"][-1])
print(dic[1004]["韦小宝"][-3]["独臂神尼"]["韦小宝师傅"]["兰陵王"])
print(dic[1004]["韦小宝"][-3]["独臂神尼"]["花木兰"][-1]["爸爸"])
posted @ 2020-10-13 08:41  Ylinn  阅读(126)  评论(0)    收藏  举报