03-字典

字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值key=>value对用冒号:分割,每个对之间用逗号,分割,整个字典包括在花括号{}中 。

1.字典的增删改查

1.增
1. 通过 字典名["键"] = "值"来添加:
dic = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}   
dic["德邦"] = "赵信"
print(dic) # {'草丛伦': '大宝剑', '易大师': '剑圣', '剑豪': '压缩', '德邦': '赵信'}

注意:如果添加的键在原字典中已经存在,那么就是更新这个键所对应的值;如果添加的键在字典中没有,那么才是在字典中添加一个新的键值对。

2. dict.setdefault("键","值")
dic = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}   
dic.setdefault("火女","安妮")
print(dic)  # {'火女': '安妮', '草丛伦': '大宝剑', '剑豪': '压缩', '易大师': '剑圣'}

该方法也可以进行查询。

如果没有对应的key,则返回None

2.删
1. dict.pop(key):
    参数解析:
        key:将要删除的键值对中的键。
    该方法需要传入一个字典中的键,然后对应删除这个键在字典中的所代表的的键值对。
    注意:这个方法 会将被删除的键值对中的值返回。
    
    注意:如果删除的键值不在字典中,该方法会抛出KeyError异常。
    
    dic1 = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
    ret = dic1.pop("易大师")
    print(ret)      # 剑圣
    print(dic1)     # {'剑豪': '压缩', '草丛伦': '大宝剑'}


2. del dict[key]:
    删除。
    参数解析:
        key:字典中的键。
    该方法同样需要传入一个字典中的键。
    这个方法没有返回值。
    
    注意:如果删除的键值不在字典中,该方法会抛出KeyError异常。
    
    dic1 = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
    del dic1["剑豪"]
    print(dic1)     # {'易大师': '剑圣', '草丛伦': '大宝剑'}
3.改
1. 通过 字典名["键"] = "值"​来修改:
    如果键在字典中已经存在,那么则是修改键对应的值;如果不在字典中,那么则是添加键值。
    dic1 = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
    dic1["草丛伦"]  = "盖伦"
    print(dic1)     # {"易大师":"剑圣","剑豪":"压缩","草丛伦":"盖伦"}


2. dic1.update(dic2):
    将字典dic2中的键值更新到字典dic1中。
    dic1 = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
    dic2 = {"剑圣":"易大师","维恩":"VN"}
    dic1.update(dic2)
    print(dic1)     # {'草丛伦': '大宝剑', '剑圣': '易大师', '维恩': 'VN', '易大师': '剑圣', '剑豪': '压缩'}


3. dic.clear():
    清空字典。
    dic = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
    dic.clear()
    print(dic)      # {} 清除之后是一个空字典

4.查询
1. 通过for循环来查。默认查询出来的是值:
    dic = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
    for i in dic:
        print(i)  # 剑豪  草丛伦   易大师
    
2. dic.setdefault(key):
    根据传递的字典中的键,进行查询。
    如果在字典中存在查询的键,那么返回这个键对应的值;
    如果在字典中不存在查询的键,那么返回None
    
    dic3 = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
    print(dic3.setdefault("剑豪"))          # 压缩
    print(dic3.setdefault("影流之主")       # None

3. 通过键值来查询:
    类似于字符串或是列表中的切片取值。根据传递的键名,来取键对应的值。
    
    注意:如果要取的键在字典中不存在,那么会抛出异常。
    
    dic3 = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
    print(dic3["易大师"])       # 剑圣

4. dict.get(key[,index]):
    参数解析:
        key:传入的某个键名。
        index:可选参数,如果获取的键不在字典中,那么返回index。
    该方法如果查询到键在字典中存在,那么会返回键对应的值;如果键不存在字典中,那么返回None,或者返回传入的返回值index。
    
    dic3 = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
    print(dic3.get("易大师"))                   # 剑圣
    print(dic3.get("易大师傅","没有这个键"))    # 没有这个键

2.字典的操作

1. dict.keys()

获取字典中的全部键。返回的是一个由字典中的全部键组成的列表。

dic4 = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"

print(dic4.keys())  # dict_keys(['易大师', '草丛伦', '剑豪']) 这个列表也是可以进行迭代的。
2. dict.values()

获取字典中的全部value,返回由这些value组成的一个高仿列表。

dic4 = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
# 获取全部的值
print(dic4.values()) # dict_values(['压缩', '大宝剑', '剑圣'])
3. dict.items()

获取的是字典中每一个键值对所组成的元组。该方法通常用来进行对字典数据的解包。

dic4 = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}

print(dic4.items())     # dict_items([('草丛伦', '大宝剑'), ('易大师', '剑圣'), ('剑豪', '压缩')])

dic4 = {"易大师":"剑圣","剑豪":"压缩","草丛伦":"大宝剑"}
# 解构
for a,b in dic4.items():
    print(key, value)
    # Tom
    # 易大师 剑圣
    # 剑豪 压缩
    # 草丛伦 大宝剑
    # 姓名 Tom

字典练习

# 1. 将字符串转化为对应的字典:"易大师:剑圣|剑豪:压缩|草丛伦:大宝剑"
s = "易大师:剑圣|剑豪:压缩|草丛伦:大宝剑"
# 1.先将字符串用"|"分割
new_s = s.split("|")
print(new_s)
dic = {}
# 2.对分割出来的字符串进行循环,并使用解构将其中的数据分别解析出来并赋值
for i in new_s:
    # 3.再次进行分割
    k,v = i.split(":")
    # 4.赋值给字典中的键值
    dic[k] = v
print(dic)   # {'剑豪': '压缩', '草丛伦': '大宝剑', '易大师': '剑圣'}


# 2. 一个列表,将其中大于66的值添加到字典中k1键中的值,将小于66的数据添加到字典中k2的值
list = [11,22,33,44,55,66,77,88,99]
dic1 = {"k1":[],"k2":[]}
for i in list:
    if i == 66:
        continue
    elif i > 66:
        dic1.gete("k1").append(i) # 查询出k1键对应的值,并向其中添加内容
    elif i < 66:
        dic1.get("k2").append(i)
print(dic1)  # {'k2': [11, 22, 33, 44, 55], 'k1': [77, 88, 99]}

# 3. 电影投票:给每个电影进行投票,最后以字典的形式显示出来
pitcure_list = ["解决吾先生","美国往事","西西里的美丽传说","变形金刚"]
dic2 = {}
for film in pitcure_list:
    fen = input("请给'{}'打分:".format(film))
    dic2[film] = fen
print(dic2) # {'变形金刚': '8', '西西里的美丽传说': '7', '解决吾先生': '5', '美国往事': '6'}


# 4. 车牌区域匹配:根据车牌信息,分析各省的车牌数量
cars = ["豫A12345","豫B12345","豫A12346","沪A12345","沪B12345","黑A12345"]
locals = {"豫":"河南","沪":"上海","黑":"黑龙江"}
result = {}
for car in cars:
    province_Abbreviation = car[0]                  # 省份缩写
    # print(province_Abbreviation)
    province = locals[province_Abbreviation]        # 省份
    if result.get(province) == None:
        result[province] = 1
    else:
        result[province] += 1
print(result)   # {'上海': 2, '河南': 3, '黑龙江': 1}
原文地址:https://www.cnblogs.com/Pilaoban/p/13068617.html