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.字典

1.增和改

字典[键] = 值 - 当键存在的时候修改键对应的值,当键不存在的时候是添加键值对
字典.setdefault(键, 值) - 添加键值对,如果键已经存在,则不会改变值

cat = {'name':'叨叨','age':2,'color':'white'} 
  • 添加

    cat['breed'] = '美短'
    print(cat)  
    # 返回{'name': '叨叨', 'age': 2, 'color': 'white', 'breed': '美短'}
    
    cat.setdefault('weight', 8) 
    print(cat) 
    # {'name': '叨叨', 'age': 1, 'color': 'white', 'breed': '美短', 'weight': 8}
    
    cat.setdefault('age', 3)  # 如果键已经存在,则不会改变值
    print(cat) #{'name': '叨叨', 'age': 1, 'color': 'white', 'breed': '美短', 'weight': 8}
    
  • 修改

    cat['age'] = 1
    print(cat)
    # {'name': '叨叨', 'age': 1, 'color': 'white', 'breed': '美短'}
    
  • 练习:在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)
    
2.删 - 删除键值对

del 字典[键] - 删除字典中指定键对应的键值对(如果键不存在会报错)
字典.pop(键) - 取出字典中指定键对应的值

del cat['color']
print(cat) 
# {'name': '叨叨', 'age': 1, 'breed': '美短', 'weight': 8}

del_value = cat.pop('breed')
print(cat)  # {'name': '叨叨', 'age': 1, 'weight': 8}
print(del_value) # 美短
3.字典相关操作

字典不支持+、*,也不支持比较大小的运算符,只支持==、!=
in 和 not in - 字典的in 和 not in判断的是件是否存在

4.字典相关函数
'''
len		-	获取字典长度
dict()  -   1)数据本身是一个序列
            2)序列中的元素必须是有且只有两个元素的小序列
            3)小序列的第一个元素必须是不可变的数据
'''
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}

"""
字典转换成列表/元组
"""
dic2 = {'a': 10, 'b': 1, 'c': 20}
print(list(dic2))  # ['a', 'b', 'c']
5.字典相关方法
'''
字典.clear    -   清空
字典.copy     -   复制原字典产生一个一模一样的新字典
字典.update(序列) -   将序列中所有的元素都添加到字典中(如果本身就存在就会被覆盖)。序列必须是字典或者是能够被转换成字典的序列
items、keys、values  
字典.keys    -    获取字典所有的键,返回一个序列(这个序列不是列表和元组) 
'''
data3 = {'d': 23, 'e': 21}
print(dic2)  # {'a': 10, 'b': 1, 'c': 20}
dic2.update(data3)
print(dic2)  # {'a': 10, 'b': 1, 'c': 20, 'd': 23, 'e': 21}

dic2.update(['xy','mn'])
print(dic2) # {'a': 10, 'b': 1, 'c': 20, 'd': 23, 'e': 21, 'x': 'y', 'm': 'n'}

print(dic2.keys())  #dict_keys(['a', 'b', 'c', 'd', 'e', 'x', 'm'])
print(dic2.values()) # dict_values([10, 1, 20, 23, 21, 'y', 'n'])
print(dic2.items()) # dict_items([('a', 10), ('b', 1), ('c', 20), ('d', 23), ('e', 21), ('x', 'y'), ('m', 'n')])
6.字典推导式
'''
{键的表达式:值的表达式 for 变量 in 序列}
{键的表达式:值的表达式 for 变量 in 序列 if 条件语句}
'''
dic3 = {'a': 10, 'b': 1, 'c': 20}
new_dic3 = {dic3[key]:key for key in dic3}
print(new_dic3)

2.集合

1.什么是集合(set)

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

# 1)集合
set1 = set()
print(type(set1), len(set1))  # <class 'set'> 0

# 2)集合是无序
print({1,2,3}=={2,3,1})   # True

# 3)元素必须是不可变的数据
set2 = {1, 'ab', (2,3)}
print(set2)     #{(2, 3), 1, 'ab'}
# set3 = {1, 'ab', [2,3]}
# print(set2)   # 报错,[2,3]可变

# 4)元素是唯一的
set4 = {1, 2, 3, 1, 2}
print(set4) # {1, 2, 3}

2.集合元素的增删改查

? 1)查 - 遍历

"""
for 元素 in  集合:
    循环体
"""
nums = {23, 90, 89, 34}
for x in  nums:
    print(x)

? 2)增

"""
集合.add(元素)  -   在集合中添加指定元素
集合.updat(序列)   -   将序列中的元素全部添加到集合中
"""
nums.add(22)
print(nums)  # {34, 22, 23, 89, 90}

nums.update('abc')
print(nums)  # {'c', 34, 'b', 'a', 22, 23, 89, 90}

? 3)删

"""
集合.remove(元素)   -   删除指定元素,如果元素不存在会报错
集合.discard(元素)  -   删除指定元素,如果元素不存在不会报错
集合.pop()  -   随机删除集合中的一个元素
"""
nums.remove(89)
print(nums)  # {34, 'b', 'a', 22, 23, 90, 'c'}

nums.discard(22)
print(nums)  # {34, 'a', 'b', 23, 90, 'c'}

? 4)改 - 集合无法直接修改元素的值,如果非要改就将要改的元素删除,添加新的元素

nums.remove('a')
nums.add('A')
print(nums) # {34, 'c', 'A', 23, 'b', 90}
3.数学集合运算

&(交集)、|(并集)、-(差集)、^(对称差集)、>/<(真子集)、>=/<=(子集)

集合运算与数学中的集合运算方法一致,演示如下:

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

# 2)集合1 | 集合2  -  获取两个集合所有的元素
print(num1 | num2) # {1, 2, 3, 4, 5, 6, 7}

# 3)集合1 - 集合2   -   获取集合1中包含在集合2以外的部分
print(num1 - num2)  # {1, 2, 3, 4}

# 4)集合1 ^ 集合2 -   将两个集合合并,去掉并集部分
print(num1 ^ num2) # {1, 2, 3, 4, 8, 9}

# 5)集合1 > 集合2   -   判断集合2是否是集合1的真子集
print(num1 > num2)  # False

3.字典与集合练习

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

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

    2. 打印不及格学生的名字和对应的成绩

    3. 打印手机尾号是8的学生的名字

      # 前三题可以一起完成
      count = 0
      for stuin students:
          if stu['score'] < 60:
              count += 1
              print('不及格学生是:',stu['name'],'他的成绩是:%.f'%stu['score'])
          if stu['tel'][-1] == '8':
              print('手机尾号是8的学生的姓名:',stu['name'])
      print('不及格的学生人数是:',count)
      
      
    4. 打印最高分和对应的学生的名字

      max_score = students[0]['score']
      name = students[0]['name']
      for item in students:
          if item['score'] > max_score:
              max_score = item['score']
              name = item
      print('最高分:',max_score,'他的名字是:',name['name'])
      
    5. 删除性别不明的所有学生

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

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

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

      stu = (maths | chineses | englishs)
      print('选课学生一共有:',len(stu))
      
    2. 求只选了第一个学科的人的数量和对应的名字

      stu = maths - chineses - englishs
      print('只选了第一个学科的人数是:',len(stu),'他们分别是',stu)
      
    3. 求只选了一门学科的学生的数量和对应的名字

      stu = maths ^ chineses ^ englishs
      print(stu)
      
    4. 求只选了两门学科的学生的数量和对应的名字

      stu = (maths & english - chinese) | (maths & chinese -english) | (chinese & english - chinese)
      print('只选了两门学科的学生的人数是:',len(stu),'他们是:',stu)
      
    5. 求选了三门课程的学生的数量和对应的名字

      stu = maths & english & chinese
      print('选了三门课程的学生的数量:',len(stu),'他们是:',stu)
      
  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:25 
 
开发: 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 11:40:25-

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