python 学习笔记5
字典
1、创建
dict1 = {1:'one',2:'two',3:'three'}
dict2 = dict(((1,'one'),(2,'two'),(3,'three')))
dict3 = dict(x = 'x',y = 'y') #使用关键字参数创建字典
2、调用、修改和添加
dict1[1]
dict1[1] = 'one1'
dict[4] = 'four'
在序列中为一个不存在的索引赋值或修改时会报错,但是字典会创建一个新的键
3、方法
①fromkeys
dict.fromkeys(S[,v]):S为键值,v为对应的值,不会改变原字典
dict1 = {}
dict1.fromkeys((1,2,3)) #{1: None, 2: None, 3: None} 不改变dict1
dict1.fromkeys((1,2,3),'Number') #{1: 'Number', 2: 'Number', 3: 'Number'}
dict1.fromkeys((1,2,3),('one','two','three')) #{1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')}
②访问方法:keys(),values(),itms()
均返回一个迭代器,分别取键值,值和键值与值组成的元组
dict1 = {0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e'}
dict1.keys() #dict_keys([0, 1, 2, 3, 4])
dict1.values() #dict_values(['a', 'b', 'c', 'd', 'e'])
dict1.items() #dict_items([(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e')])
③get(),setdefault()
get():一个更宽松的访问方法,不会报错
setdefault():与get()类似,但是找不到键时会创建新的键
dict1 = {0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e'}
dict1.get(0) #'a'
dict1.get(5) #None
dict1.get(0,'没有') #'a'
dict1.get(5,'没有') #'没有'
dict1.setdefault(0) #'a'
dict1.setdefault(5) #None dict1 = {0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e', 5: None}
dict1.setdefault(0,'f') #'a' dict1不变
dict1.setdefault(5,'f') #'f' dict1 = {0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e', 5: 'f'}
④clear():清空字典
dict1.clear() #dict1 = {} #清空内存,推荐做法
dict1 = {} #不严谨,只是将dict1重新指向一个空字典,没有清内存,有安全隐患
⑤pop(),popitem()
pop(S) 返回对应的值并将其从字典中剔除
popitem():返回最后一项并将其从字典中剔除
dict1.pop(1) #b dict1 = {0: 'a', 2: 'c', 3: 'd', 4: 'e'}
dict1.popitem() #(4, 'e') dict1 = {0: 'a', 1: 'b', 2: 'c', 3: 'd'}
⑥update()
dict1.update(dict2) 使用dict2去更新dict1,dict2中有但dict1中没有的键将在dict1中创建新的键,dict1和dict2中都有的键使用dict2中相应的值代替dict1中相应的值,dict1中有但dict2中没有的键不变。
dict1 = {1:'one',2:'two'}
dict2 = {1:'one',3:'three'}
dict1.update(dict2) #dict1 = {1: 'one', 2: 'two', 3: 'three'}
4、操作符
成员资格操作符,查看的是键而不是值
0 in dict1 #True
5 in dict1 #Flase
集合
1、创建
花括号并且不体现集合,每个元素是唯一的,元素无序的,不能用索引
set1 = {} #type(set1) = 'dict'
set1 = {1,2,3} # type(set1) = 'set'
set1 = {1,1,1,1} # set1 = {1}
set1 = set([1,2,3,3]) #set1 = {1,2,3}
list1 = list(set([3,4,5,1,3,4,6])) #list1 = [1, 3, 4, 5, 6] 去除了重复元素,会改变索引,慎用
2、访问
for:一个一个访问集合中的数据
for item in set1:
...
in,not in :判断一个元素是否在集合中
1 in set1 #True
3、方法
①add():添加元素
set1.add(6)
②remove():移除元素
set1.remove(5)
8、不可变集合
将集合冻结(froze),不可被删除元素或添加元素。
set2 = frozenset(set1) #返回一个与set1相同的不可变集合存在set2中,不改变set1,set1依旧可变
文件
1、打开文件
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
mode:打开模式
打开模式 | 执行操作 |
---|---|
‘r’ | 以只读方式打开文件(默认) |
‘w’ | 以写入方式打开文件,会覆盖原有的文件,不存在时会创建一个新文件 |
‘x’ | 如果文件已存在,会引发异常 |
‘a’ | 以写入模式打开, 如果文件存在,在则在末尾追加写入 |
‘b’ | 以二进制模式打开文件 |
‘t’ | 以文本模式打开 |
‘+’ | 可读写模式 |
‘U’ | 通用换行符支持 |
file1 = open('D:\\python3\\t.txt','r') #将t.txt文件以只读模式打开存在file1中
文件对象方法
文件对象方法 | 执行操作 |
---|---|
f.close() | 关闭文件 |
f.read(size = -1) | 从文件中读取size个字符,当未给定size或给定负值时,读取剩余所有的字符,并作为字符串返回 |
f.readline() | 以写入模式打开,如果文件存在,则在末尾追加写入 |
f.write(str) | 将字符串str写入文件 |
f.writelines(seq) | 向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象 |
f.seek(offset,from) | 在文件中移动文件指针,从from(0代表文件起始位置,1代表文件当前位置,2代表文件末尾)偏移offset个字节 |
f.tell() | 返回当前在文件中的位置 |