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字典和集合

python字典和集合

1.字典的增删改查

1.1 增和改

字典[键] = 值 - 当键存在的时候是修改键对应的值;当键不存在的时候是添加键值对
字典.setdefault(键,值) - 添加键值对(键存在时不会改变原有的键值,键不存在时则添加键和值)

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 item in students:
    item.setdefault('score',0)
    print(item)

1.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)  # 蓝猫

2.字典的相关操作

2.1 相关操作

字典不支持+ 、*,也不支持比较大小的运算,只支持 ==、!=

in 和 not in - 字典的in 和 not in判断的是键是否存在

键 in 字典

键 not in 字典

dic1 = {'a':10,'b':20,'c':30}
print(10 in dic1)  # False
print('a' in dic1)  # True

2.2 相关函数
dict(数据) - 将数据转换为字典
数据本身是一个序列
序列中的元素必须有且只有两个元素的小序列
小序列的第一个元素必须是不可变的数据

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))  # {'a': 'b', 'c': 'd', 1: 2}

# data4 = ('abc')
# print(dict(data4)) # 报错

字典转换成列表/元组

dic2 = {'a':10,'b':20,'c':30}
print(list(dic2))   # ['a', 'b', 'c']

print(tuple(dic2))  # ('a', 'b', 'c')

2.3 字典相关方法

字典.clear() - 清空字典
字典.copy - 复制原字典产生一个一模一样的字典
字典.update(序列) - 将序列中所有的元素都添加到字典中(如果本身就存在就会覆盖),序列必须是字典或者能够转换成字典的序列
items、keys、values
字典.keys() - 获取字典中所有的键,返回键名,看着像列表但不是列表

data3 = {'d':40,'e':50}
print(dic2)  # {'a': 10, 'b': 20, 'c': 30}
dic2.update(data3)
print(dic2)  # {'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': 50}
dic2.update(['xy','mn'])
print(dic2)  # {'a': 10, 'b': 20, 'c': 30, 'd': 40, 'e': 50, 'x': 'y', 'm': 'n'}
dic2.update({'d':400,'e':500})
print(dic2)  # {'a': 10, 'b': 20, 'c': 30, 'd': 400, 'e': 500, 'x': 'y', 'm': 'n'}

print(dic2.keys())  # dict_keys(['a', 'b', 'c', 'd', 'e', 'x', 'm'])
print(dic2.values()) # dict_values([10, 20, 30, 400, 500, 'y', 'n'])
print(dic2.items())  # dict_items([('a', 10), ('b', 20), ('c', 30), ('d', 400), ('e', 500), ('x', 'y'), ('m', 'n')])

2.4 字典推导式

{键的表达式:值的表达式 for 变量 in 序列}
{键的表达式:值的表达式 for 变量 in 序列 if 条件语句}

# 练习:通过字典的推导式交换一个字典的键和值
data4 = {'a':10,'b':20}
data5 = {data4[key]:key for key in data4}
print(data5)

3. 集合

3.1 什么是集合(set)

集合是容器:将{}做为容器标志,多个元素用逗号隔开:{元素1,元素2,元素3,…}
集合是可变的:集合是无序的;
元素:不可变的数据、元素是唯一的(具备自动去重的功能)

  • 空集合

    set1 = set()
    print(type(set1),len(set1))  # <class 'set'> 0
    
  • 集合是无序的

    print({1,2,3}=={3,2,1}) # True
    
  • 元素必须是不可变的数据

    set2 = {1,'abc',(1,3)}  # {'abc', 1, (1, 3)}
    print(set2)
    # set3 = {1,'abc',[1,3]}
    # print(set3) # 报错
    
  • 元素是惟一的

    set4={1,2,3,1,1,2,3}
    print(set4)  # {1, 2, 3}
    

3.2 集合元素的增删改查

  • 查 - 遍历

    for 元素 in 集合:
    循环体

    nums = {23,90,89,78}
    for x in nums:
        print(x)
    
  • 集合.abb(元素) - 在集合中添加指定元素
    集合.update(序列) - 将序列中的元素全部添加到集合中去

    nums = {23,90,89,78}
    nums.add(45)
    print(nums)   # {45, 78, 23, 89, 90}
    
    nums.update('abc')
    print(nums)   # {'b', 45, 78, 'c', 23, 89, 90, 'a'}
    
  • 集合.remove(元素) - 删除指定元素,如果元素不存在会报错
    集合.discard(元素) - 删除指定元素,如果元素不存在不会报错

    nums.remove(89)
    print(nums)   # {'c', 'a', 'b', 45, 78, 23, 90}
    
    nums.discard(90)
    print(nums)  # {'c', 'b', 'a', 45, 78, 23}
    
  • 改 - 集合无法直接修改元素的值,如果非要改就将要改的元素删除,添加新的元素

    nums.discard('a')
    nums.add('f')
    print(nums)
    

3.3 数学集合运算:&(交集)、|(并集)、-(差集)、^(对称差集)、>/<(真子集)、>=/=<(子集)

nums1={1,2,3,4,5,6,7}
nums2={5,6,7,8,9,0}
# 3.1 集合1 & 集合2  - 获取两个集合的公共元素
print(nums1 & nums2)  # {5, 6, 7}

# 3.2 集合1 | 集合2   - 获取两个集合所有的集
print(nums1|nums2)   # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

# 3.3 集合1-集合2 - 获取集合1中除了包含在集合2中的部分
print(nums1-nums2)   # {1, 2, 3, 4}
print(nums2-nums1)   # {0, 8, 9}

# 3.4 集合1^集合2 - 将两个集合合并,并去掉中间公共部分

print(nums1^nums2)   # {0, 1, 2, 3, 4, 8, 9}

# 3.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个学生的信息(学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明) )

    students =[
        [['姓名','张'],['年龄',22],['数学',88],['电话',10086],['性别','男']],
        [['姓名','李'],['年龄',21],['数学',56],['电话',10086],['性别','女']],
        [['姓名','成'],['年龄',20],['数学',90],['电话',10086],['性别','不明']],
        [['姓名','吴'],['年龄',18],['数学',72],['电话',10088],['性别','男']],
        [['姓名','周'],['年龄',19],['数学',82],['电话',10088],['性别','女']],
        [['姓名','朱'],['年龄',23],['数学',93],['电话',10086],['性别','男']]
    ]
    
    1. 统计不及格学生的个数

      cj_sum1=0
      for cj in range(len(students)):
          if students[cj][2][1] <60:
              cj_sum1 +=1
      print('不及格学生的个数为:',cj_sum1)
      
    2. 打印不及格学生的名字和对应的成绩

      for cj in range(len(students)):
          if students[cj][2][1] <60:
             print(students[cj][0][1],students[cj][2][1])
      
    3. 打印手机尾号是8的学生的名字

      for tel in range(len(students)):
          if students[tel][3][1]%10==8:
              print('手机尾号是8的学生的名字:',students[tel][0][1])
      
    4. 打印最高分和对应的学生的名字

      max_cj=students[0][2][1]
      for cj in range(1,len(students)):
          if students[cj][2][1] > max_cj:
              max_cj=students[cj][2][1]
              xm=cj
      print('最高分的学生是:',students[xm][0][1])
      
    5. 删除性别不明的所有学生

      index =0
      while index > len(students):
          if students[index][4][1] == '不明':
              del students[index]
          else:
              index+=1
      print(students)
      
    6. 将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)

      stu = []
      for index in range(len(students)):
          for cj in range(len(students)):
              if students[index][2][1] < students[cj][2][1]:
                  stu = students[cj]
                  students[cj]=students[index]
                  students[index]=stu
      print(students)
      
  2. 用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)

    math = {'猪八戒','孙悟空','姜子牙','妲己','黄忠','吕布','王昭君','杨戬','后裔','鲁班','狄仁杰','白起'}
    yuwen = {'马可波罗','孙权','关羽','刘备','鲁班','黄忠','孙悟空','妲己','赵云','后裔'}
    english ={'成吉思汗','孙策','赵云','高渐离','老夫子','吕布','姜子牙','狄仁杰','后裔','程咬金'}
    
    1. 求选课学生总共有多少人

      print('总共有选课学生',len(math|yuwen|english))
      
    2. 求只选了第一个学科的人的数量和对应的名字

      dic1 = math-yuwen-english
      print('只选了第一个学科的人的数量为:',len(dic1),'对应的名字:',dic1)
      
    3. 求只选了一门学科的学生的数量和对应的名字

      dic2 = (math-yuwen-english)|(yuwen-math-english)|(english-math-yuwen)
      print('只选了一个学科的人的数量为:',len(dic2),'对应的名字:',dic2)
      
    4. 求只选了两门学科的学生的数量和对应的名字

      dic3 = ((math&yuwen)|(math&english)|(yuwen&english))-(math&yuwen&english)
      print('只选了两门学科的人的数量为:',len(dic3),'对应的名字:',dic3)
      
    5. 求选了三门学生的学生的数量和对应的名字

      dic4 = math&yuwen&english
      print('选了三门学科的人的数量为:',len(dic4),'对应的名字:',dic4)
      
  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 14:07:30  更:2021-07-22 14:10:23 
 
开发: 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/7 6:04:51-

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