- 字典(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 钱令武', '知乎小组': '李严 黑桃', '学习群': '咖喱 排骨'}
#有人重复了