datawhale python Day3

  1. 字典(dict)
    1.1 概念:
    在Python中,字典是一系列键—值对。每个键都与一个值相关联,你可以使用键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。
    在Python中,字典用放在花括号{}中的一系列键—值对表示。
student_0={'name':'mike','points‘:90}# 这个字典存储了有关student_0 的信息,具体地说是这个学生的信息。在这个字典中,字符串'name' 是一个键,与之相关联的值为'mike' 。'points'是一个键,与之相关联的值为90。

1.2 访问字典中的值
要获取与键相关联的值,可依次指定字典名和放在方括号内的键,如下所示:

student_0={'name':'mike','points':90}
print(student_0['name'])
print(student_0['points']
依次得到:
mike
90

1.3 添加键-值对
字典是一种动态结构,可随时在其中添加键—值对。要添加键—值对,可依次指定字典名、用方括号括起的键和相关联的值。

student_0={'name':'mike','points':90}
student_0['home']='New York'
student_0['height']=178
print(student_0)
得到:
{'name': 'mike', 'points': 90, 'home': 'New York', 'height': 178}

1.4 修改字典中的值
要修改字典中的值,可依次指定字典名、用方括号括起的键以及与该键相关联的新值。

student_0={'name':'mike','points':90}
student_0['points']=98
print(student_0)
得到:
{'name': 'mike', 'points': 98}

1.5 删除键—值对:del语句

student_0={'name':'mike','points':90}
del student_0['points']
print(student_0)
得到:
{'name': 'mike'}

1.6 由类似对象组成的字典:用字典保存多个对象的信息
在前面的示例中,字典存储的是一个对象的多种信息,但你也可以使用字典来存储众多对象的同一种信息。

student_home={
'mike':'New York',
'david':'Houston',
'lucy':'Detroit',
}
print("mike comes from "+student_home['mike'])
得到:
mike comes from New York

1.7 字典的遍历
1.7.1 遍历字典中的所有键:方法keys()

student_home={
'mike':'New York',
'david':'Houston',
'lucy':'Detroit',
}
for name in student_home.keys():
print(name)
得到:
mike
david
lucy 

1.7.2 遍历字典中的所有值:方法values

student_home={
'mike':'New York',
'david':'Houston',
'lucy':'Detroit',
}
for home in student_home.values():
print(home)
得到:
New York
Houston
Detroit

1.7.3 遍历所有的键-值对:方法items()

student_home={
'mike':'New York',
'david':'Houston',
'lucy':'Detroit',
}
for k,v in student_home.items():
print("key: "+k)
print("value:"+v)
得到:
key: mike
value:New York
key: david
value:Houston
key: lucy
value:Detroit

1.8 字典与列表的嵌套:有时候需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套 嵌套 。你可以在列表中嵌套字典、在字典中嵌套列表甚至在字典中嵌套字典。
1.8.1 字典列表:在列表中存储字典,列表的每一个元素是一个字典

student_0={'name':'mike','points':90}
student_1={'name':'david','points':95}
student_2={'name':'lucy','points':98}
student_info=[student_0,student_1,student_2]
for student in student_info:
print(student)
得到:
{'name': 'mike', 'points': 90}
{'name': 'david', 'points': 95}
{'name': 'lucy', 'points': 98}

1.8.2 在字典中存储列表:字典的值为列表

favourite_city={
'mike':['Beijing','Xian'],
'david':['Shanghai','Nanjing'],
'lucy':['Hangzhou','Xiamen'],
}
print(favourite_city['mike'])
print(favourite_city['mike'][1]) 
得到:
['Beijing', 'Xian']
Xian

1.8.3 在字典中存储字典:字典的值为字典

students={
'mike':{'points':90,'home':'New York'},
'david':{'points':95,'home':'Houston'}
}
print(students['mike'])
print(students['david']['points'])
得到:
{'points': 90, 'home': 'New York'}
95

2 集合(set)
2.1 概念:集合里面的元素是唯一且无序的,不支持索引。
2.2 创建:把一堆元素用花括号{}括起来;使用set()工厂函数

set1=set([1,2,2,3,4,5,5])
print(set1)
得到:
{1, 2, 3, 4, 5} #去除了重复的元素2和5

2.3 常用方法
2.3.1 遍历

set1={1,2,3,4,5,6,7}
for num in set1:
print(num)
得到:
1
2
3
4
5
6
7 

2.3.2 判断元素是否在集合中

set1={1,2,3,4,5,6,7}
print(2 in set1)
print(8 in set1)
得到:
True
False

2.3.3 添加和删除元素

set1={1,2,3,4,5,6,7}
set1.add(8)
print(set1)
set.remove(1)
print(set1)
得到:
{1, 2, 3, 4, 5, 6, 7, 8}
{2, 3, 4, 5, 6, 7, 8}

2.3.4 不可变集合

set1=forzenset([1,2,3,4,5,6]) # 该集合的元素是不可改变的,此时无法进行添加和删除

3 Python对文件的操作
3.1 从文件中读取数据(如果要让Python打开不与程序文件位于同一个目录中的文件时,需要提供文件路径,它让Python到系统的特定位置去查找)
3.1.1 读取整个文件
示例:在程序文件的相同目录下创建名为"program.txt"的文件,内容为:I love Python.

with open('program.txt') as f: #使用with妥善地打开和关闭文件,在不需要访问文件的时候将其关闭
contents=f.read()
print(contents)
得到:
I love Python.

3.1.2 逐行读取
示例:在程序文件的相同目录下创建名为"program.txt"的文件,内容为:
I love Python.
I love C too.

filename='program.txt'
with open(filename) as f:
       for line in f:
            print(line)
 得到:
 I love Python.

 I  love  C  too.

3.1.3 创建一个包含文件各行内容的列表

filename='program.txt'
with open(filename) as f:
      lines=f.readlines()   # readlines()方法从文件中读取每一行,并将其存储在一个列表中。
 for line in lines:
     print(line)

注意:在读取时要注意解码方式(gbk/utf-8)详见:gbk无法解码时的处理方法

3.2 写入文件
调用open()方法时可以提供两个参数,第一个实参是要打开文件的名称。第二个实参告诉Python,我们要用何种模式打开该文件。

‘r’读取模式
‘w’写入模式
‘a’附加模式

注意:(1)如果省略了模式实参,Python将以默认的只读模式打开文件。(2)如果要写入的文件不存在,函数open()将自动创建它。(3)用’w’的方式时,如果指定的文件已经存在,Python将在返回文件对象前清空该文件。(4)如果要给文件添加内容,而不是覆盖原来的内容,可以用附加模式’a’来操作。
示例:在程序文件的相同目录下创建名为"program.txt"的文件,内容为:
I love Python.
I love C too.

filename='program.txt'
with open(filename,'w') as f:
       f.write('now I love  ruby') 
 #此时,文件内容为now I love ruby.之前的内容被清空。
filename='program.txt'
with open(filename,'a') as f:
       f.write('\nnow I love  ruby') 
  #此时,文件内容为
I love Python.
I love C too.
now I love ruby.

3.3 python对Excel的操作(暂时没有消化,详见链接)
python操作excel,python操作excel使用xlrd、xlwt和xlutils模块,xlrd模块是读取excel的,xlwt模块是写excel的,xlutils是用来修改excel的。这几个模块使用pip安装即可。
3.3.1 对excel的写操作实例

import xlwt
#只能写不能读
stus = [['姓名', '年龄', '性别', '分数'],
        ['mary', 20, '女', 89.9],
        ['mary', 20, '女', 89.9],
        ['mary', 20, '女', 89.9],
        ['mary', 20, '女', 89.9]
        ]
book = xlwt.Workbook()  # 新建一个excel
sheet = book.add_sheet('case1_sheet')#添加一个sheet页
row = 0#控制行
for stu in stus:
    col = 0  # 控制列
    for s in stu:# 再循环里面list的值,每一列
        sheet.write(row,col,s)
        col+=1
    row+=1
book.save('stu_1.xls') # 保存到当前目录下

3.3.2 对excel 的读操作:

import xlrd
  #只能读不能写
book = xlrd.open_workbook('stu.xls')#打开一个excel
sheet = book.sheet_by_index(0)#根据顺序获取sheet
sheet2 = book.sheet_by_name('case1_sheet')#根据sheet页名字获取sheet
print(sheet.cell(0,0).value)#指定行和列获取数据
print(sheet.cell(0,1).value)
print(sheet.cell(0,2).value)
print(sheet.cell(0,3).value)
print(sheet.ncols)#获取excel里面有多少列
print(sheet.nrows)#获取excel里面有多少行
print(sheet.get_rows())#
for i in sheet.get_rows():
     print(i)#获取每一行的数据
print(sheet.row_values(0))#获取第一行
for i in range(sheet.nrows):#0 1 2 3 4 5
     print(sheet.row_values(i))#获取第几行的数据 
 print(sheet.col_values(1))#取第一列的数据
 for i in range(sheet.ncols):
    print(sheet.col_values(i))#获取第几列的数据

Python对Excel的操作详见此链接
作业:读取一个文件,将文件中转换为字典,key值为学习项目,value值为一个负责人列表,并判断字典中是否有负责人负责多个学习项目。

lines={}
b=[]
f=open('homework.txt',encoding='UTF-8')
for line in f.readlines():
    line=line.strip()
    key=line.split()[0]
    value1=line.split()[1]
    value2=line.split()[2]
    value=value1+" "+value2
    lines[key] = value
f.close()
print(lines)
c=set(b)
print(c)
if len(c) < 18:
    print("\n有人重复了")
else:
   print("\n没有人重复")
 结果为:

      
{'python学习': '咖喱 胡骞', 'leetcode刷题': '老表 陈焕森', '编程集训': '孙超 小熊', '统计学': '李奇峰 蓝昔', 'ML项目实践': '杨冰楠 孙涛', '高级算法梳理': '于鸿飞 小雪', '基础算法梳理': 'sm1les 钱令武', '知乎小组': '李严 黑桃', '学习群': '咖喱 排骨'}
#有人重复了 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值