一、字典
字典的特性:
- dict是无序的
- key必须是唯一的,自动去重
dic={ 'name':'yolanda', 'age':18, 'job':'engineer' } #其他写法 dic=dict({'name':'yolanda','age':18}) dic=dict((('name','yolanda'),('age',18),)) #添加 dic['hobbies'] = 'learn' #修改 dic['age']=20 #输出 print(dic['name']) print(dic.get('name')) #找不到不会报错,会返回none #清空 dic.clear() #快速生成一个字典 dic=dic.fromkeys('abc',1) dic=dic.fromkeys(['a','b'],1) #注意:修改一个values后key值后面的values都会改变 data=dict.fromkeys([1,2,3],{'name':'yolanda','age':18}) data[1]['name']='jack' print(data) #条目 print(dic.items()) for k,v in dic.items(): print(k,v)
#另一种循环:
for k in dic:
print(k,dic[k])
#取出key值 print(dic.keys()) #取出values print(dic.values()) #删除 #dic.pop('name') dic.popitem() #随机删除一个 #增加 dic.setdefault('gender',[]).append('famale') #更新,如果存在则替换 dic1={'name':'jack'} dic.update(dic1) dic.update(name='tom') #复制 dic={'food':['beef','bread','egg']} dic2=dic.copy() dic2['food'][1]='apple' #此时是浅复制,修改一个字典列表里的value,另一个字典也会改变 #深复制 import copy dic3=copy.deepcopy(dic)
简单的列子:
打印一个三级菜单
menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家':{}, 'youku':{}, }, '上地':{ '百度':{}, }, }, '昌平':{ '沙河':{ '老男孩':{}, '北航':{}, }, '天通苑':{}, '回龙观':{}, }, '朝阳':{}, '东城':{}, }, '上海':{ '闵行':{ "人民广场":{ '炸鸡店':{} } }, '闸北':{ '火车战':{ '携程':{} } }, '浦东':{}, }, '山东':{}, } current_level = menu last_level = [] while True: for key in current_level: print(key) chooice = input('>>:').strip() if len(chooice) == 0:continue if chooice == 'q':exit() if chooice == 'b': if not last_level:break current_level = last_level[-1] last_level.pop() if chooice not in current_level:continue last_level.append(current_level) current_level=current_level[chooice]
二、集合
集合是一个无序的,不重复的数据组合,它的主要作用如下:
- 去重,把一个列表变成集合,就自动去重了
- 关系测试,测试两组数据之前的交集、差集、并集等关系
s1={1,2,3,4,5}
s2={3,4,6,7}
s3={3,4}
#其他定义方式
s4=set('hello')
print(s4)
#结果:{'o', 'l', 'e', 'h'}
#并集
print(s1&s2)
print(s1.intersection(s2))
s1.intersection_update(s2) #s1=s1&s2
#结果:{3, 4}
#交集
print(s1|s2)
print(s1.union(s2))
#结果:{1, 2, 3, 4, 5, 6, 7}
#差集
print(s1-s2)
print(s1.difference(s2))
s1.difference_update(s2) #s1=s1-s2
#结果:{1, 2, 5}
#对称差集
print(s1^s2)
print(s1.symmetric_difference(s2))
s1.symmetric_difference_update(s2) #s1=s1^s2
#结果:{1, 2, 5, 6, 7}
#子集
print(s2<=s1)
print(s3<=s1)
print(s2.issubset(s1))
print(s3.issubset(s1))
#结果:False;True;False;True
#父集
print(s1>=s2)
print(s1>=s3)
print(s1.issuperset(s2))
print(s3.issuperset(s3))
#结果:False;True;False;True
#添加
s1.update('ho')
print(s1)
s1.update(s2)
print(s1)
#结果:update会把'ho'拆开
# {1, 2, 3, 4, 5, 'o', 'h'}
# {1, 2, 3, 4, 5, 'h', 6, 7, '0'}
s1.add('hello')
print(s1)
#结果:add不会拆开字符串
#{1, 2, 3, 4, 5, 'o', 6, 7, 'hello', 'h'}
#随机删除
s1.pop()
#指定删除
s1.remove(1)
#如果指定删除的内容不存在则返回错误
s1.discard('t')
print(s1)
#此时不返回错误
三、文件操作
基本操作:
f = open('file') #打开文件
open('file',encoding='utf-8') #字符编码
open('file','r') #指定打开方式
first_line = f.readline()
print('first line:',first_line) #读一行
print('我是分隔线'.center(50,'-'))
data = f.read()# 读取剩下的所有内容,文件大时不要用
print(data) #打印文件
f.close() #关闭文件
打开文件的模式有:
- r,只读模式(默认)。
- w,只写模式。【不可读;不存在则创建;存在则删除内容;】
- a,追加模式。【可读; 不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件
- r+,可读写文件。【可读;可写;可追加】
- w+,写读
- a+,同a
"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
- rU
- r+U
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
- rb
- wb
- ab
例:类似于sed的小程序
import sys old=sys.argv[1] new=sys.argv[2] file=open(sys.argv[3],'r',encoding='utf-8') file_new=open(sys.argv[3],'r+',encoding='utf-8') for line in file: if old in line: line=line.replace(old,new) file_new.write(line) file.close() file_new.close()
浙公网安备 33010602011771号