IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python_字典和集合 -> 正文阅读

[Python知识库]python_字典和集合

  • 字典的增和改
  1. 字典[ 键] = 值 当键存在的时候是修改键对应的值;当键不存在的时候是添加键值对字典.setdefault(键, 值) - 添加键值对(当键存在的时候不会修改原来的值)
  2. 删 - 删除键值对
    del 字典[键] - 删除字典中指定键对应的键值对(如果键不存在会报错)
    字典.pop(键) - 取出字典中指定键对应的值(如果键不存在会报错)
    代码如下:
     cat = {'name': '美美', 'age': 2, 'color': '白色'}
     print(cat)      # {'name': '美美', 'age': 2, 'color': '白色'}
     
     # 添加
     cat['breed'] = '蓝猫'
     print(cat)      # {'name': '美美', 'age': 2, 'color': '白色', 'breed': '蓝猫'}
     
     # 修改
     cat['age'] = 3
     print(cat)      # {'name': '美美', 'age': 3, 'color': '白色', 'breed': '蓝猫'}
     
     # 添加
     cat.setdefault('weight', 8)
     print(cat)      # {'name': '美美', 'age': 3, 'color': '白色', 'breed': '蓝猫', 'weight': 8}
     
     cat.setdefault('age', 4)
     print(cat)      # {'name': '美美', 'age': 3, 'color': '白色', 'breed': '蓝猫', 'weight': 8}
     
     # 练习:在students中没有分数的学生中添加分数对应的键值对,分数值为零
     students = [
         {'name': 'stu1', 'tel': '1234', 'score': 89},
         {'name': 'stu2', 'tel': '465', 'score': 80},
         {'name': 'stu3', 'tel': '678'},
         {'name': 'stu3', 'score': 78},
         {'name': 'stu4', 'tel': '234'}
     ]
     for stu in students:
         stu.setdefault('score', 0)
     print(students)
     
     2. 删  -  删除键值对
     del 字典[键]     -    删除字典中指定键对应的键值对(如果键不存在会报错)  
     字典.pop(键)     -    取出字典中指定键对应的值(如果键不存在会报错) 
     """
     print(cat)      # {'name': '美美', 'age': 3, 'color': '白色', 'breed': '蓝猫', 'weight': 8}
     
     del cat['color']
     print(cat)      # {'name': '美美', 'age': 3, 'breed': '蓝猫', 'weight': 8}
     
     del_value = cat.pop('breed')
     print(cat)      # {'name': '美美', 'age': 3, 'weight': 8}
     print(del_value)    # 蓝猫
    
  • 字典的相关操作和函数

    1.字典不支持+、*,也不支持比较大小的运算符,只支持 ==、!=
    in 和 not in - 字典的in 和 not in判断的是键是否存在
    键 in 字典
    键 not in 字典
    2.相关函数
    len
    dict(数据)

    1)数据本身是一个序列
    2)序列中的元素必须是有且只有两个元素的小序列
    3)小序列的第一个元素必须是不可变的数据

    字典相关方法
    字典.clear() - 清空字典
    字典.copy - 复制原字典产生一个一模一样的新字典
    字典.update(序列) - 将序列中所有的元素都添加到字典中(如果本身就存在就会覆盖)。序列必须是字典或者能够转换成字典的序列

    items、keys、values
    字典.keys() - 获取字典所有的键,返回一个序列(这个序列不是列表或元组)

    4.字典推导式
    {键的表达式:值的表达式 for 变量 in 序列}
    {键的表达式:值的表达式 for 变量 in 序列 if 条件语句}

    代码分别如下:

    dic1 = {'a': 10, 'b': 20, 'c': 30}
    print(10 in dic1)       # False
    print('a' in dic1)     # True
    
    data = [('a', 10), ('b', 20)]
    print(dict(data))       # {'a': 10, 'b': 20}
    
    data2 = ['ab', range(2), [10, 20]]
    print(dict(data2))      # {'a': 'b', 0: 1, 10: 20}
    
    data3 = ('ab', 'cd', range(1, 3))
    print(dict(data3))
    
    # data4 = ('abc', 'cd', range(1, 3))
    # print(dict(data4))        # 报错
    
    #字典转换成列表/元组
    dic2 = {'a': 10, 'b': 20, 'c': 30}
    print(list(dic2))       # ['a', 'b', 'c']
    
    data3 = {'d': 100, 'e': 200}
    print(dic2)     # {'a': 10, 'b': 20, 'c': 30}
    dic2.update(data3)
    print(dic2)     # {'a': 10, 'b': 20, 'c': 30, 'd': 100, 'e': 200}
    
    dic2.update(['xy', 'mn'])
    print(dic2) # {'a': 10, 'b': 20, 'c': 30, 'd': 100, 'e': 200}
    
    dic2.update({'d': 1000, 'f': 2000})
    print(dic2)     # {'a': 10, 'b': 20, 'c': 30, 'd': 1000, 'e': 200, 'x': 'y', 'm': 'n', 'f': 2000}
    
    print(dic2.keys())      # dict_keys(['a', 'b', 'c', 'd', 'e', 'x', 'm', 'f'])
    print(dic2.values())    # dict_values([10, 20, 30, 1000, 200, 'y', 'n', 2000])
    print(dic2.items())     # dict_items([('a', 10), ('b', 20), ('c', 30), ('d', 1000), ('e', 200), ('x', 'y'), ('m', 'n'), ('f', 2000)])
    
    # 练习:通过字典的推导式交换一个字典的键和值
    """{'a': 10, 'b': 20}  -> {10:'a', 20:'b'}"""
    dic3 = {'a': 10, 'b': 20}
    new_dic3 = {dic3[key]: key for key in dic3}
    print(new_dic3)
    
    
  • 集合
    1.集合是容器;将{}作为容器标志,多个元素用逗号隔开:{元素1, 元素2, 元素3,…}
    集合是可变的;集合是无序;
    元素:不可变的数据、元素是唯一的(具备自动去重的功能)
    2.集合元素的增删改查
    1)查 - 遍历
    for 元素 in 集合:
    循环体
    集合.add(元素) - 在集合中添加指定元素
    集合.update(序列) - 将序列中的元素全部添加到集合中
    集合.remove(元素) - 删除指定元素,如果元素不存在会报错
    集合.discard(元素) - 删除指定元素,如果元素不存在不会报错
    改 - 集合无法直接修改元素的值,如果非要改就将要改的元素删除,添加新的元素
    数学集合运算: &(交集)、|(并集)、-(差集)、^(对称差集)、>/<(真子集)、>=/<=(子集)
    集合1 & 集合2 - 获取两个集合的公共元素(获取既在集合1里面又在集合2里面的元素)
    集合1 | 集合2 - 获取两个集合所有的元素
    集合1 - 集合2 - 获取集合1中除了包含在集合2中以外的部分
    集合1 ^ 集合2 - 将两个集合合并,去掉中间公共部分
    子集(有可能相等)和真子集(真的比它小)
    集合1 > 集合2 -> 判断集合2是否是集合1的真子集

    代码分别如下:

    # 1)空集合
    set1 = set()
    print(type(set1), len(set1))        # <class 'set'> 0
    
    # 2)集合是无序
    print({1, 2, 3} == {3, 1, 2})       # True
    
    # 3)元素必须是不可变的数据
    set2 = {1, 'acb', (2, 3)}
    print(set2)         # {(2, 3), 1, 'acb'}
    
    # set3 = {1, 'acb', [2, 3]}         # 报错
    # print(set3)
    
    # 4)元素是唯一的
    set4 = {1, 2, 3, 1, 1, 3}
    print(set4)     # {1, 2, 3}
    
    nums = {23, 90, 89, 78}
    for x in nums:
        print(x)
    
    # 2)增
    """
    集合.add(元素)  -   在集合中添加指定元素
    集合.update(序列)   -   将序列中的元素全部添加到集合中
    """
    nums.add(45)
    print(nums)     # {45, 78, 23, 89, 90}
    
    nums.update('abc')
    print(nums)     # {'c', 'b', 45, 78, 'a', 23, 89, 90}
    
    # 3)删
    """
    集合.remove(元素)    -   删除指定元素,如果元素不存在会报错
    集合.discard(元素)      -   删除指定元素,如果元素不存在不会报错
    """
    nums.remove(89)
    print(nums)     # {'a', 'c', 45, 78, 23, 'b', 90}
    
    nums.discard(90)
    print(nums)     # {'b', 'c', 'a', 45, 78, 23}
    
    # nums.remove(100)      # 报错!
    nums.discard(100)
    
    # 3.数学集合运算: &(交集)、|(并集)、-(差集)、^(对称差集)、>/<(真子集)、>=/<=(子集)
    nums1 = {1, 2, 3, 4, 5, 6, 7}
    nums2 = {5, 6, 7, 8, 9}
    
    # 1)集合1 & 集合2    -   获取两个集合的公共元素(获取既在集合1里面又在集合2里面的元素)
    print(nums1 & nums2)        # {5, 6, 7}
    
    # 2)集合1 | 集合2    -   获取两个集合所有的元素
    print(nums1 | nums2)        # {1, 2, 3, 4, 5, 6, 7, 8, 9}
    
    # 3)集合1 - 集合2    -   获取集合1中除了包含在集合2中以外的部分
    print(nums1 - nums2)        # {1, 2, 3, 4}
    print(nums2 - nums1)        # {8, 9}
    
    # 4)集合1 ^ 集合2       -       将两个集合合并,去掉中间公共部分
    print(nums1 ^ nums2)        # {1, 2, 3, 4, 8, 9}
    
    # 5)子集(有可能相等)和真子集(真的比它小)
    # 集合1 > 集合2  -> 判断集合2是否是集合1的真子集
    print({10, 20, 30, 40} > {1, 2})        # False
    print({10, 20, 30, 40} > {10, 40})      # True
    print({10, 20, 30, 40} > {10, 20, 30, 40})      # False
    print({10, 20, 30, 40} >= {10, 20, 30, 40})     # True
    

作业

  1. 定义一个列表,在列表中保存6个学生的信息(学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明) )

    1. 统计不及格学生的个数

      代码如下:

      student_mas = [
                         {'姓名':'小明','年龄':18,'成绩':98,'手机号码':'13483958385','性别': '男'},
                         {'姓名':'小材','年龄':17,'成绩':59,'手机号码':'14248394828','性别':'不明'},
                         {'姓名':'小王','年龄':22,'成绩':97,'手机号码':'13509364738','性别':'不明'},
                         {'姓名':'小偲','年龄':20,'成绩':55,'手机号码':'15594735483','性别':'男'},
                         {'姓名':'小杜','年龄':16,'成绩':92,'手机号码':'18827384932','性别':'女'},
                         {'姓名':'小周','年龄':16,'成绩':99,'手机号码':'18726374833','性别':'女'}
                         ]
      count = 0
      for i in range(len(student_mas)):
          if student_mas[i]['成绩'] < 60:
              count += 1
      print('不及格学生的个数:',count)
      #不及格学生的个数: 2
      
    2. 打印不及格学生的名字和对应的成绩

      代码如下:

      for i in range(len(student_mas)):
          if student_mas[i]['成绩'] < 60:
              print(student_mas[i]['姓名'],':',student_mas[i]['成绩'])
      """
      小材 : 59
      小偲 : 55
      """
      
    3. 打印手机尾号是8的学生的名字

      代码如下:

      for i in range(len(student_mas)):
          if int(student_mas[i]['手机号码'])%10 == 8:
              print(student_mas[i]['姓名'],end = ' ')
      """
      小材 小王 
      """
      
    4. 打印最高分和对应的学生的名字

      代码如下:

      max_score = student_mas[0]["成绩"]
      max_name = student_mas[0]["姓名"]
      for i in range(len(student_mas)):
          if student_mas[i]['成绩'] > max_score:
              max_score = student_mas[i]["成绩"]
              max_name = student_mas[i]["姓名"]
      print("最高分:", max_name, max_score)
      """
      最高分: 小周 99
      """
      
    5. 删除性别不明的所有学生

      代码如下:

      for stu in student_mas[::]:
           if stu['性别'] == '不明':
               student_mas.remove(stu)
      print(student_mas)
      """
      [{'姓名': '小明', '年龄': 18, '成绩': 98, '手机号码': '13483958385', '性别': '男'}, {'姓名': '小偲', '年龄': 20, '成绩': 55, '手机号码': '15594735483', '性别': '男'}, {'姓名': '小杜', '年龄': 16, '成绩': 92, '手机号码': '18827384932', '性别': '女'}, {'姓名': '小周', '年龄': 16, '成绩': 99, '手机号码': '18726374833', '性别': '女'}]
      
      """
      
    6. 将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)

      代码如下:

      student_mas.sort(key=lambda item: item['成绩'], reverse=True)
      print(student_mas)
      """
      [{'姓名': '小周', '年龄': 16, '成绩': 99, '手机号码': '18726374833', '性别': '女'}, {'姓名': '小明', '年龄': 18, '成绩': 98, '手机号码': '13483958385', '性别': '男'}, {'姓名': '小王', '年龄': 22, '成绩': 97, '手机号码': '13509364738', '性别': '不明'}, {'姓名': '小杜', '年龄': 16, '成绩': 92, '手机号码': '18827384932', '性别': '女'}, {'姓名': '小材', '年龄': 17, '成绩': 59, '手机号码': '14248394828', '性别': '不明'}, {'姓名': '小偲', '年龄': 20, '成绩': 55, '手机号码': '15594735483', '性别': '男'}]
      
      """
      
  2. 用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)

    1. 求选课学生总共有多少人

      代码如下:

      Chinese = {'stu1', 'stu2', 'stu3', 'stu4', 'stu5', 'stu6', 'stu11'}
      math = {'stu1', 'stu2', 'stu4', 'stu6', 'stu7', 'stu10', 'stu11'}
      English = {'stu7', 'stu2', 'stu4', 'stu6', 'stu7', 'stu12', 'stu13'}
      print('选课学生总共有:', len(Chinese | math | English))
      #选课学生总共有: 11
      
    2. 求只选了第一个学科的人的数量和对应的名字

      代码如下:

      print('只选了第一门学科的有:', len(Chinese - math - English), '  学生是:', Chinese - math - English)
      #只选了第一门学科的有: 2   学生是: {'stu5', 'stu3'}
      
    3. 求只选了一门学科的学生的数量和对应的名字

      代码如下:

      one = (Chinese ^ math ^ English) - (Chinese & math & English)
      print('只选了一门学科的有:', len(one), '  学生是:', one)
      #只选了一门学科的有: 5   学生是: {'stu13', 'stu3', 'stu12', 'stu10', 'stu5'}
      
    4. 求只选了两门学科的学生的数量和对应的名字

      代码如下:

      two = (Chinese & math - English) | (Chinese & English - math) | (English & math - English)
      print('只选了两门课的总共:', len(two), '  学生是:', two)
      #只选了两门课的总共: 2   学生是: {'stu11', 'stu1'}
      
    5. 求选了三门学生的学生的数量和对应的名字

      代码如下:

      three = Chinese & math & English
      print('选了三门课的学生总共:', len(three), '  学生是:', three)
      #选了三门课的学生总共: 3   学生是: {'stu2', 'stu4', 'stu6'}
      
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-22 22:58:57  更:2021-07-22 22:59:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/6 21:08:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码