005-2018-09-07 字典

本文深入探讨Python中的列表、元组、字典等数据结构的使用方法,包括增删改查操作、切片技巧及字典的高级应用,如嵌套字典和字典操作,适合初学者和进阶学习者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.今日内容大纲

一. 回顾昨日内容
    1. 列表的定义:
        能装对象的对象. 由[]表示. 内部使用逗号隔开
        索引和切片 . 从0开始
        [start: end: step]
    2. 增删改查
        1. 新增: append(), insert(), extend()迭代添加
        2. 删除: pop(), remove(), clear(), del 元素
        3. 修改: 索引或切片修改
        4. 查询: 索引查询 for el in list:
        5. 操作: count(), index(), find(), sort(reverse=True), reverse()
    3. 元组(tuple):
        由()表示. 内部用逗号隔开.
        不可变, 只读列表
        不可变指的是第一层元素.

        不可变的数据类型: int, str, bool, (元组)

    4. range()
        range(10) 0-9
        range(1, 12)  1-11
        range(1,12, 3) 1 4 7 10

        for el in list: # 没有索引

        for i in range(len(list)):
            list[i]
二. 作业讲解

三. 今日主要内容
    1. 什么是字典
        dict. 以{}表示. 每一项用逗号隔开, 内部元素用key:value的形式来保存数据
        {"jj":"林俊杰", "jay":"周杰伦"}

        查询的效率非常高, 通过key来查找元素
        内部使用key来计算一个内存地址(暂时),hash算法. key必须是不可变的数据类型(key 必须是可哈希的数据类型)
        可哈希就是不可变

    2. 字典的增删改查
        1. 字典的新增:
            dict[新key] = value
            dict.setdefault()
        2. 删除
            pop(key)
            popitem()
            clear()
            del dict[key]
        3. 修改
            dic[key] = 新值
            update()
        4. 查询
            1. 用key直接查询 dict[key]
            2. get(key, 如果key不存在返回的数据)
            3. setdefault() 1. 执行新增流程. 2. 查询结果
        5. 操作
            1. keys() 获取所有键  这个返回的不是列表, 很像列表
            2. values()获取所有的值
            3. items() 获取所有的键值对. 返回的是元组
            解构, 直接把元组或者列表中的数据拿出来.
            a, b, c = (a1, b1, c1) 必须一一对应

        6. 遍历字典
            for key in dict:
                dict[key]

            for k, v in dict.items():
                k , v

        7. 字典嵌套.


    预习:
        1. == 和 is 的区别(小数据池)
        2. 再谈编码(decode(), encode())

        建议: 1. 本周作业过一遍. 大作业    2. 玩儿. 回来之后.预习一下. 大作业

2.练习

'''
day4作业及默写
1,写代码,有如下列表,按照要求实现每⼀个功能
li = ["alex", "WuSir", "ritian", "barry", "wenzhou"]
1)计算列表的⻓度并输出
2)列表中追加元素"seven",并输出添加后的列表
3)请在列表的第1个位置插⼊元素"Tony",并输出添加后的列表
4)请修改列表第2个位置的元素为"Kelly",并输出修改后的列表
5)请将列表l2=[1,"a",3,4,"heart"]的每⼀个元素添加到列表li中,⼀⾏代码实
现,不允许循环添加。
6)请将字符串s = "qwert"的每⼀个元素添加到列表li中,⼀⾏代码实现,不
允许循环添加。
7)请删除列表中的元素"eric",并输出添加后的列表
8)请删除列表中的第2个元素,并输出删除的元素和删除元素后的列表
9)请删除列表中的第2⾄4个元素,并输出删除元素后的列表
10)请将列表所有得元素反转,并输出反转后的列表
11)请计算出"alex"元素在列表li中出现的次数,并输出该次数。
2,写代码,有如下列表,利⽤切⽚实现每⼀个功能
li = [1, 3, 2, "a", 4, "b", 5,"c"]
1)通过对li列表的切⽚形成新的列表l1,l1 = [1,3,2]
2)通过对li列表的切⽚形成新的列表l2,l2 = ["a",4,"b"]
3)通过对li列表的切⽚形成新的列表l3,l3 = ["1,2,4,5]
4)通过对li列表的切⽚形成新的列表l4,l4 = [3,"a","b"]
5)通过对li列表的切⽚形成新的列表l5,l5 = ["c"]
6)通过对li列表的切⽚形成新的列表l6,l6 = ["b","a",3]
3,写代码,有如下列表,按照要求实现每⼀个功能。
lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
1)将列表lis中的"tt"变成⼤写(⽤两种⽅式)。
2)将列表中的数字3变成字符串"100"(⽤两种⽅式)。
3)将列表中的字符串"1"变成数字101(⽤两种⽅式)。
4,请⽤代码实现:

li = ["alex", "eric", "rain"]
利⽤下划线将列表的每⼀个元素拼接成字符串"alex_eric_rain"
5.利⽤for循环和range打印出下⾯列表的索引。
li = ["alex", "WuSir", "ritian", "barry", "wenzhou"]
6.利⽤for循环和range找出100以内所有的偶数并将这些偶数插⼊到⼀个新列表
中。
7.利⽤for循环和range 找出50以内能被3整除的数,并将这些数插⼊到⼀个新列
表中。
8.利⽤for循环和range从100~1,倒序打印。
9.利⽤for循环和range从100~10,倒序将所有的偶数添加到⼀个新列表中,然
后对列表的元素进⾏筛选,将能被4整除的数留下来。
10,利⽤for循环和range,将1-30的数字⼀次添加到⼀个列表中,并循环这个
列表,将能被3整除的数改成*。
11,查找列表li中的元素,移除每个元素的空格,并找出以"A"或者"a"开头,并
以"c"结尾的所有元素,并添加到⼀个新列表中,最后循环打印这个新列表。
li = ["TaiBai ", “ale xC", “AbC ", "egon", " ri TiAn", "WuSir", " aqc"]
12,开发敏感词语过滤程序,提示⽤户输⼊评论内容,如果⽤户输⼊的内容中
包含特殊的字符:
敏感词列表 li = ["苍⽼师", "东京热", "武藤兰", "波多野结⾐"]
则将⽤户输⼊的内容中的敏感词汇替换成等⻓度的*(苍⽼师就替换***),并添
加到⼀个列表中;如果⽤户输⼊的内容没有敏感词汇,则直接添加到上述的列
表中。
13,有如下列表
li = [1, 3, 4, "alex", [3, 7, 8, "TaiBai"], 5, "RiTiAn"]
循环打印列表中的每个元素,遇到列表则再循环打印出它⾥⾯的元素。
我想要的结果是:
1
3
4
"alex"
3
7,
8
"taibai"
5
ritian
14. 把班级学⽣数学考试成绩录⼊到⼀个列表中: 并求平均值. 要求: 录⼊的时候
要带着⼈名录⼊, 例如: 张三_44
15. 敲七游戏. 从0开始数数. 遇到7或者7的倍数要在桌上敲⼀下. 编程来完成敲
七
16. (升级题) 编写程序. 完成⼼动⼥⽣的筛选. (升级题)
          ⾸先. 程序会提示⽤户录⼊10位⼼仪⼥⽣的姓名. 然后把10位⼥⽣的名
字和序号展示出来. 由⽤户选择⼼动⼥⽣. 此时⽤户可以选择3个⼼动⼥⽣. 把⽤
户选中的三个⼼动⼥⽣的名字打印出来. 供⽤户继续选择. 这⼀次选择. 只能选
择⼀名⼥⽣. 然后输出⽤户的⼼动⼥⽣是xxx
运⾏效果:
明⽇默写内容
1,将列表的增删改查不同的⽅法全部写出来,
例如:增:有三种,append:在后⾯添加。Insert按照索引添加,
extend:迭代着添加。
2,默写第,13题的实现的代码。
'''

# li = ["alex", "WuSir", "ritian", "barry", "wenzhou", "eric"]
#
# l2=[1,"a",3,4,"heart"]
# # print(len(li))
# # li.append("seven")
# li.extend(l2)
# li.remove(li[2])
# li.pop(2)
# print(li)

# li = [1, 3, 2, "a", 4, "b", 5,"c"]
# # ["c"]
# print(li[-1:])

# lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
# lis[3][2][1][0] = lis[3][2][1][0].upper()
# lis[3][2][1][0] = "TT"
# lis[3][2][1][0] = lis[3][2][1][0].replace("t", "T")
# lis[3][2][1][0] = lis[3][2][1][0].swapcase()

# lis[3][2][1][1] = "100"
# lis[3][2][1][1] = str(lis[3][2][1][1] + 97)

# lis[3][2][1][2] = int(lis[3][2][1][2] + "01")
# lis[3][2][1][2] = 101
# lis[3][2][1][2] = int(lis[3][2][1][2]) + 100


# print(lis)



# li = ["alex", "eric", "rain", "刘伟","你很六"]
# # 1+2+3+4+5....
# s = ""
# for el in li:  # el 列表中的每一个字符串
#     s = s + el + "_"
# print(s[:-1])

#
# li = ["alex", "WuSir", "ritian", "barry", "wenzhou"]
# for i in range(len(li)):
#     print(i)

# lst = []
# for i in range(50):
#     if i % 3 == 0:
#         lst.append(i)
#
# print(lst)

# for i in range(100, 0, -1):
#     print(i)

# lst = []
# for i in range(100, 9, -1):
#     if i % 2 == 0 and i % 4 == 0:
#         lst.append(i)
# print(lst)

# lst = []
# for i in range(1, 30):
#     lst.append(i)
#
# for i in range(len(lst)):
#     if lst[i] % 3 == 0:
#         lst[i] = "*"
# print(lst)


# 查找列表li中的元素,移除每个元素的空格,并找出以"A"或者"a"开头,并
# 以"c"结尾的所有元素,并添加到⼀个新列表中,最后循环打印这个新列表。
# li = ["TaiBai ", "ale xC", "AbC ", "egon", " ri TiAn", "WuSir", " aqc"]
#
# lst = []
# for el in li:
#     el = el.replace(" ", "")  # 去掉空格的
#     if el.upper().startswith("A") and el.endswith("c"):
#         lst.append(el)
# print(lst)


# 敏感词列表 li = ["苍⽼师", "东京热", "武藤兰", "波多野结⾐"]
# 则将⽤户输⼊的内容中的敏感词汇替换成等⻓度的*(苍⽼师就替换***),并添
# 加到⼀个列表中;如果⽤户输⼊的内容没有敏感词汇,则直接添加到上述的列
# 表中。
# li = ["苍老师", "东京热", "武藤兰", "波多野结衣"]
# content = input("请开始你的评论:")
# for el in li:
#     if el in content:
#         content = content.replace(el, "*"*len(el))
# print(content)

# print(list)
# print(type([]))

# li = [1, 3, 4, "alex", [3, 7, 8, "TaiBai"], 5, "RiTiAn", [3, 7, 8, "TaiBai"]]
# for el in li:
#     if type(el) == list:
#         for el2 in el:
#             if type(el2) == str:
#                 print(el2.lower())
#             else:
#                 print(el2)
#     else:
#         if type(el) == str:
#             print(el.lower())
#         else:
#             print(el)

# for i in range(len(li)):
#     if i != 4:
#         print(li[i])
#     else: # 第四个是列表. 继续循环
#         for el in li[4]:
#             print(el)


# lst = []
# while 1:
#     info = input("请输入学生信息(Q退出):")  # 张三_44
#     if info.upper() == "Q":
#         break
#     lst.append(info)
# sum = 0
# for el in lst:  # 张三_44
#     sum += int(el.split("_")[1])
#
# print(sum/len(lst))

# 敲七
# n = int(input("请输入数字n:"))
# lst = []
# for i in range(1, n+1):
#     if i % 7 == 0 or "7" in str(i):
#         lst.append("咣")
#     else:
#         lst.append(i)
# print(lst)


3.字典

dic = {"jj":"林俊杰", "jay":"周杰伦","tz":"陶喆", 1:"哈哈", (1,2,3):"胡辣汤"} # unhashable type: 'list'
print(dic)

4.字典的新增

# dic = {}
# # 徐峥:人在囧途
# dic['徐峥'] = "人在囧途" # 直接用key往里面存数据即可
# dic['黄渤'] = "疯狂的石头"
# dic["王宝强"] = "天下无贼"
# dic["王宝强"] = "士兵突击" # 如果key已经存在。 那么会替换掉原来的value, 修改
#
# dic.setdefault("黄秋生")
# dic.setdefault("黄秋生", "无间道")    # 如果存在了key, 不会执行新增
#
# print(dic)



5.字典的删除

dic = {"黄日华": "天龙八部", "吕颂贤": "笑傲江湖", "苏有朋": "倚天屠龙记", "六小龄童": "西游记"}
# dic.pop("吕颂贤") # 指定key删除
# dic.popitem()  # 随机删除
# del dic["黄日华"]  # 删除
# dic.clear() # 清空字典

print(dic)


6.字典的修改和查询

dic = {"刘能": "王小利", "赵四": "刘晓光", "王木生": "范伟", "谢大脚": "于月仙", "李大国": "小鬼"}
# dic['王木生'] = "刘伟"
dic2 = {"刘能": "大阳哥", "赵四": "github", "王木生": "汪峰", "谢大脚": "冯提莫", "王大拿": "金老板"}
dic.update(dic2)
print(dic)

# 查询
dic = {'刘能': '大阳哥', '赵四': 'github', '王木生': '汪峰', '谢大脚': '冯提莫', '李大国': '小鬼', '王大拿': '金老板'}
# 1. 最直观。 直接用key
print(dic['周杰伦'])  # 当这个key不存在的时候会报错
# 2. get方法
print(dic.get("谢大脚", "周杰伦不在这里"))  # 没有key. 返回None
# 3. setdefault()  1. 新增(先看有没有key, 如果有就过, 如果没有,执行新增) 2.根据key把值返回
dic = {}
dic["盖伦"] = "德玛西亚之力"
value = dic.setdefault("菲奥娜", "无双剑姬")  # 新增
value2 = dic.setdefault("盖伦", "刘伟")  # 由于已经存在了key。 所以新增不执行。 直接查询结果
value3 = dic.setdefault("薇恩", "坑")

print(value3)
print(dic)

7.字典的相关操作

dic = {"汪峰": "大陆音乐半壁江山", "周杰伦": "亚洲音乐天王", "罗志祥": "亚洲舞王"}

# 对字典的遍历
# print(dic.keys())   # dict_keys(['汪峰', '周杰伦', '罗志祥']) 像列表但不是列表
# for key in dic.keys():
#     print(key)  # 拿到key
#     print(dic[key]) # 拿到value

# print(dic.values())
# for value in dic.values():
#     print(value)


# 也可以遍历字典
# [('汪峰', '大陆音乐半壁江山'), ('周杰伦', '亚洲音乐天王'), ('罗志祥', '亚洲舞王')]
# print(dic.items())  # 拿到的是key和value
for k, v in dic.items(): # 当需要遍历字典. 在操作中涉及到key和value的时候.
    print(k) # 元组
    print(v)


# 字典本身是一个可迭代对象,可以直接进行for循环
for el in dic:  # 直接拿到key
    print(el)
    print(dic[el])

# 前面的变量的个数和后面解包的个数一致
# a, b = (10, 20) # 解构, 解包
# print(a)
# print(b)


8.字典的嵌套

wf = {
    "name": "汪峰",
    "age": 48,
    "成名曲": "春天里",
    "wife": {
        "name": "章子怡",
        "age": 39,
        "工作": "演员"
    },
    "children":[
        {"num": "001", "name": "汪一", "hobby": "唱歌"},
        {"num": "002", "name": "汪二", "hobby": "演戏"} # wf['children'][1]['name']
    ]
}

# wf['wife']['age'] = wf['wife']['age'] + 10
# print(wf)



9.其他

# 创建并输出菜单, 菜单是不可变的. 所以使用元组
# menus = ("1, 录入", "2, 查询", "3, 删除", "4, 修改", "5, 退出")
#
# 存储用户的信息    id: {'name':'名字', 'weight':体重, 'height':身高}
# 例如:目前有两个用户信息:1. 汪峰, 2. 章子怡
# 推荐存储结构:
# bodies = {
#    1:{'name':'汪峰', 'weight':80, 'height':1.8, 'BMI':24.7},
#    2:{'name':'章子怡', 'weight':50, 'height':1.65, 'BMI':18.4}
#  }
# bodies = {}
#
# body_id = 1  # 编号从1开始
#
# 体质指数(BMI)= 体重(kg)÷ (身高(m) x 身高(m))
# 体重的单位: KG
# 身高的单位: m
# 需求:
# 首先。打印菜单,然后用户输入选择的菜单项
# 输入1:进入录入环节。用户需要录入:名字,身高,体重.
#        由程序计算出BMI指数. 保存到bodies字典中. 第一个用户的id是1, 第二个是2, 以此类推
#        录入完毕后. 提示用户是否继续录入. 如果选择是, 则继续进行录入, 直到用户输入否. 则返回到主菜单
# 输入2: 进入查询环节, 提示用户输入要查询的人的id. 如果不存在,给与提示, 如果存在. 则显示出该用户的全部信息(名字,身高,体重,BMI)
#        然后提示用户是否继续查询. 如果选择是, 继续进行查询, 直到用户输入否, 返回主菜单
# 输入3: 进入删除环节, 提示用户输入要删除的人的id, 如果id不存在, 给与提示, 如果存在, 则执行删除操作. 并提示删除成功.
#         然后提示用户是否继续删除, 如果是, 继续让用户选择要删除的id, 直到用户输入否, 返回主菜单
# 输入4: 进入修改环节, 首先让用户输入要修改的人的id, 根据id查找用户信息, 如果不存在, 给与提示, 如果存在, 将用户原信息进行打印,
#        然后提示用户输入新的名字, 身高, 体重. 由程序重新计算BMI指数. 并将新的信息保存在bodies中. 同时给用户展示新的用户信息
#        然后提示用户是否继续修改, 如果是, 则继续要求用户输入id信息. 直到用户输入否, 返回主菜单.
# 输入5: 程序退出.
#
# 输入其他任何内容. 都予以提示不合法. 让用户重新进行输入

while 1:
    print("- - - - - - - - - - - 此处是菜单 - - - - - - - - - - -")
    menus = ("1, 录入", "2, 查询", "3, 删除", "4, 修改", "5, 退出")
    print(menus)
    print("- - - - - - - - - - - 此处是菜单 - - - - - - - - - - -")
    userInputCode = input("请输入菜单序号:")
    case = ["1", "2", "3", "4", "5"]
    bodies0 = {}
    if userInputCode == case[0]:
        userId = 1
        bodies = {}
        while 1:
            personBody = {}
            userName = personBody["name"] = input("请输入用户NAME:")
            userWeight = personBody['weight'] = input("请输入用户WEIGHT:")
            userHeight = personBody['height'] = input("请输入用户HEIGHT:")
            userBMI = personBody['BMI'] = str(float(userWeight)/((float(userHeight))**2))
            print(personBody)
            bodies[userId] = personBody
            userId += 1
            if input("是否继续录入(Y/N):").strip().upper() == "Y":
                continue
            else:
                break
        # print(bodies)
    elif userInputCode == case[1]:
        while 1:
            el = []
            for key in bodies:
                el.append(key)
            # print(el)
            queryId = int(input("请输入要查询的用户ID:").strip())
            if queryId in el:
                print("信息如下{}:".format(bodies[queryId]))
            else:
                print("请从当前列表{}选择你要查询的ID信息".format(el))
                continue
            if input("是否继续查询(Y/N):").strip().upper() == "Y":
                continue
            else:
                break
    elif userInputCode == case[2]:
        while 1:
            el = []
            for key in bodies:
                el.append(key)
            # print(el)
            delId = int(input("请输入要删除的用户ID:").strip())
            if delId in el:
                bodies.pop(delId)
                print("删除成功")
                # print(bodies)
            else:
                print("请从当前列表{}选择你要删除的ID的信息".format(el))
                break
            if input("是否继续删除(Y/N):").strip().upper() == "Y":
                continue
            else:
                break
    elif userInputCode == case[3]:
        while 1:
            el = []
            for key in bodies:
                el.append(key)
            # print(el)
            modifyId = int(input("请输入要修改的用户ID:").strip())
            if modifyId in el:
                print("ID为{}的人的信息为{}".format(modifyId,bodies.get(modifyId)))
                userName = bodies[modifyId]["name"] = input("请输入用户NAME:")
                userWeight = bodies[modifyId]['weight'] = input("请输入用户WEIGHT:")
                userHeight = bodies[modifyId]['height'] = input("请输入用户HEIGHT:")
                userBMI = bodies[modifyId]['BMI'] = str(float(userWeight)/((float(userHeight))**2))
                print("修改之后用户的信息为:{}".format(bodies[modifyId]))
            else:
                print("请从当前列表{}选择你要修改的ID的信息".format(el))
                break
            if input("是否继续修改(Y/N):").strip().upper() == "Y":
                continue
            else:
                break
    elif userInputCode == case[4]:
        break
    else:
        print("输入不合法,请重新输入!")
        continue

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值