Python基础3
1.字典
Python中的字典是python的一种数据结构,它的本质是key和value以及其对应关系的一种集合,一个key可以对应一个多个value。
Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。
-
无序的集合
-
字典中的元素通过键来存取,而不是通过偏移存取
-
字典可以在原处增长或是缩短(无需生成一份拷贝),可以包含任意类型的对象
-
支持任意深度的嵌套(可以包含列表和其他的字典)
-
属于可变映射类型(通过给索引赋值,在原处进行修改)
常见字典常量和操作
D1={} 空字典 D2={'span':2.'gan':3} 两项目字典 D3={'food':{'meat':1,'egg':2}} 嵌套 D2['eggs'] 以键进行索引运算 D3['food']['egg']
创建字典(字典由键和对应值成对组成。字典也被称作关联数组或哈希表。基本语法如下:)
D1={'aa':1,'bb':2,'cc':3} print(D1) D1={'abc':123} print(D1) D2 = { 'abc': 123, 98.6: 37 } print(D2) 注意: 每个键与值用冒号隔开(:),每对用逗号,每对用逗号分割,整体放在花括号中({})。 键必须独一无二,但值则不必。 值可以取任何数据类型,但必须是不可变的,如字符串,数或元组。
访问字典里的值(把相应的键放入熟悉的方括弧)
D1={'aa':1,'bb':2,'cc':3} print("D1['aa']:",D1['aa']) 运行结果: D1['aa']: 1
修改字典(向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值)
D1={'aa':1,'bb':2,'cc':3} D1['aa']=11 #修改 D1['dd']=4 #增加 print(D1) 运行结果: {'aa': 11, 'bb': 2, 'cc': 3, 'dd': 4} del D1['aa']; #删除'aa'的条目 print(D1) 运行结果: {'bb': 2, 'cc': 3, 'dd': 4} D1.clear() #清空词典所有条目 print(D1) 运行结果: {} del D1 #删除字典
字典内置函数&方法
内置函数 cmp(dict1, dict2) #比较两个字典元素。 len(dict) #计算字典元素个数,即键的总数。 str(dict) #输出字典可打印的字符串表示。 type(variable) #返回输入的变量类型,如果变量是字典就返回字典类型。
内置方法 dict.clear() #删除字典内所有元素 dict.copy() #返回一个字典的浅复制 dict.fromkeys() #创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 D1={}.fromkeys(['name','age']) print(D1) 运行结果: {'name': None, 'age': None} dict.get(key, default=None) #返回指定键的值,如果值不在字典中返回default值 D2={'name':'sara','age':23} print(D2.get('name')) 运行结果: sara dict.has_key(key) #如果键在字典dict里返回true,否则返回false dict.items() #以列表返回可遍历的(键, 值) 元组数组 D2={'name':'sara','age':23} print(D2.items()) 运行结果: dict_items([('name', 'sara'), ('age', 23)]) dict.keys() #以列表返回一个字典所有的键 D2={'name':'sara','age':23} print(D2.keys()) 运行结果: dict_keys(['name', 'age']) dict.update(dict2) #把字典dict2的键/值对更新到dict里 >>> d={'x':1,'y':2,'z':3} >>> f={'y':5} >>> d.update(f) >>> d {'y': 5, 'x': 1, 'z': 3} dict.values() #以列表返回字典中的所有值 d={'x':1,'y':2,'z':3} print(d.values()) 运行结果: dict_values([1, 2, 3])
2.set集合
set集合,是一个无序且不重复的元素集合。定义方式类似字典使用{}创建
~~~python
set={‘a’,‘b’,‘c’,‘a’,‘b’,‘d’,‘f’}#创建集合
print(set)
运行结果:
{‘b’, ‘d’, ‘a’, ‘f’, ‘c’}
set.add(‘sara’)#添加元素
运行结果:
{‘c’, ‘b’, ‘d’, ‘sara’, ‘a’, ‘f’}
set.clear()#清空所有元素
print(set)
运行结果:
set()
set={‘name’,‘age’,‘gender’}
set1=set.copy() #浅拷贝
print(set1)
运行结果:
{‘name’, ‘gender’, ‘age’}
set1={‘python’,‘java’,‘big data’}
set2={‘java’,‘c’,‘c++’}
set3=set1.difference(set2) #返回由两个或多个set中不同的元素组成一个新set
print(set3)
运行结果:
{‘big data’, ‘python’}
set.discard 删除指定元素,元素不存在不报错
set1={‘python’,‘java’,‘big data’}
set2=set1.discard(‘python’)
print(set1)
运行结果:
{‘big data’, ‘java’}
set.remove() 删除指定元素,元素不存在则报错
set.pop 随机指定集合元素可赋值其他容器(占位符)
set1={‘python’,‘java’,‘big data’}
set2=set1.pop()
print(set2)
运行结果:
java
set.intersection返回两个或多个set的交集,即两个或多个set中都存在的元素组成的set
set.isdisjoint 如果两个set没有交集,返回true
set.issubset 判断A集合是否是B集合的子集。
set.issupreset 判断A集合是否是B集合的父集。
set.symmetric_difference 返回A集合和B集合的差集
set.union 返回A集合和B集合的并集
3.file文件
打开和关闭文件
open 函数
file object = open(file_name [, access_mode][, buffering])
各个参数的细节如下:
- file_name:file_name变量是一个包含了你要访问的文件名称的字符串值。
- access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读®。
- buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。
close()方法
File 对象的 close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。
当一个文件对象的引用被重新指定给另一个文件时,Python 会关闭之前的文件。用 close()方法关闭文件是一个很好的习惯。
fileObject.close()
读写文件(read()和write()方法来读取和写入文件)
write()方法(write()方法可将任何字符串写入一个打开的文件)
fileObject.write(string)
# 打开一个文件
fo = open("foo.txt", "w")
fo.write( "hello worle!"\n")
# 关闭打开的文件
fo.close()
read()方法(read()方法从一个打开的文件中读取一个字符串)
fileObject.read([count])
# 打开一个文件
fo = open("foo.txt", "r+")
str = fo.read(10)
print "读取的字符串是 : ", str
# 关闭打开的文件
fo.close()
读取一个文件,将文件中转换为字典,key值为学习项目,value值为一个负责人列表,并判断字典中是否有负责人负责多个学习项目。
#读取代码
fr = open('G:\\homework.txt','r',encoding='UTF-8')
dic = {}
keys = [] #用来存储读取的顺序
lines=fr.readlines()
for line in lines:
line= line.strip().split()
key=line[0]
v1=line[1]
v2=line[2]
v=v1+" "+v2
keys.insert(-1,v1)
keys.insert(-1,v2)
dic1={}
dic1=dic.fromkeys(key)
i=0
for k in dic1:
dic1[k]=keys[i]
i+=1
list=[]
for j in dic1.values():
list.extend(v)
new_set=set(list)
if len(list)>len(new_set):
print("有多个负责人负责多个项目!")
else:
print("无负责人负责多个项目!")