Python的字典就是一个键值对,键与值是有映射关系的
创建和访问字典
用大括号来进行定义,用冒号进行分别
示例
>>> dict1 = {"李宁":"一切皆有可能","Nike":"Just do it","Adidas":"太长了","小甲鱼":"让编程改变世界"}
>>> print("Nike的口号是"+dict1["Nike"])
Nike的口号是Just do it
>>> dict2 = {1:"one",2:"two",3:"three"}
>>> dict2
{1: 'one', 2: 'two', 3: 'three'}
>>> dict2[2]
'two'
还可以用元组的形式来创建(用dict工厂函数来创建字典)(可以通过help(dict)来查看字典的创建形式)
>>> dict3 = dict((("F",70),("I",105),("S",115),("H",104),("C",67)))
>>> dict3
{'F': 70, 'I': 105, 'S': 115, 'H': 104, 'C': 67}
使用等号创建(键没有引号,他直接给名字他就会用字符串封装起来)
>>> dict4 = dict(小甲鱼="让编程改变世界")
>>> dict4
{'小甲鱼': '让编程改变世界'}
通过键来修改值,也可以用来增加键值对
>>> dict4["小甲鱼"] = "你好"
>>> dict4
{'小甲鱼': '你好'}
>>> dict4["爱迪生"] = "你好世界"
>>> dict4
{'小甲鱼': '你好', '爱迪生': '你好世界'}
字典的内建函数
用dir(dict)来查看字典的函数
fromkeys(…)
可以用他去创建并返回一个新的字典,有两个参数,第一个参数是字典的键,第二个参数是可选的,是每个键的值,默认不填为None
>>> dict1 = {}
>>> dict1.fromkeys((1,2,3))
{1: None, 2: None, 3: None}
#就是把第二个参数作为值分别给第一个参数的键
>>> dict1.fromkeys((1,2,3),"Number")
{1: 'Number', 2: 'Number', 3: 'Number'}
keys()方法:获取字典中的键
>>> dict1 = dict1.fromkeys(range(32),"赞")
>>> dict1
{0: '赞', 1: '赞', 2: '赞', 3: '赞', 4: '赞', 5: '赞', 6: '赞', 7: '赞', 8: '赞', 9: '赞', 10: '赞', 11: '赞', 12: '赞', 13: '赞', 14: '赞', 15: '赞', 16: '赞', 17: '赞', 18: '赞', 19: '赞', 20: '赞', 21: '赞', 22: '赞', 23: '赞', 24: '赞', 25: '赞', 26: '赞', 27: '赞', 28: '赞', 29: '赞', 30: '赞', 31: '赞'}
>>> for eachkey in dict1.keys():
print(eachkey)
0
1
2
3
…
30
31
- values()方法:获取字典中对应键的值
```python
>>> for eachValue in dict1.values():
print(eachValue)
赞
赞
赞
赞
...
items()方法把整个项都打印出来
>>> for eachItem in dict1.items():
print(eachItem)
(0, '赞')
(1, '赞')
(2, '赞')
(3, '赞')
(4, '赞')
(5, '赞')
…
(31, ‘赞’)
- get方法,获取指定键的值,第一个参数就是键,第二个参数默认是None,这个参数的作用是当第一个参数键不存在的时候默认把第二个参数进行返回。
```python
>>> dict1.get(31,"hello")
'赞'
>>> dict1.get(33,"hello")
'hello'
clear方法,清空这个字典
>>> dict1
{0: '赞', 1: '赞', 2: '赞', 3: '赞', 4: '赞', 5: '赞', 6: '赞', 7: '赞', 8: '赞', 9: '赞', 10: '赞', 11: '赞', 12: '赞', 13: '赞', 14: '赞', 15: '赞', 16: '赞', 17: '赞', 18: '赞', 19: '赞', 20: '赞', 21: '赞', 22: '赞', 23: '赞', 24: '赞', 25: '赞', 26: '赞', 27: '赞', 28: '赞', 29: '赞', 30: '赞', 31: '赞'}
>>> dict2 = dict1
>>> dict2
{0: '赞', 1: '赞', 2: '赞', 3: '赞', 4: '赞', 5: '赞', 6: '赞', 7: '赞', 8: '赞', 9: '赞', 10: '赞', 11: '赞', 12: '赞', 13: '赞', 14: '赞', 15: '赞', 16: '赞', 17: '赞', 18: '赞', 19: '赞', 20: '赞', 21: '赞', 22: '赞', 23: '赞', 24: '赞', 25: '赞', 26: '赞', 27: '赞', 28: '赞', 29: '赞', 30: '赞', 31: '赞'}
>>> dict2.clear()
>>> dict2
{}
>>> dict1
{}
copy方法:浅拷贝
>>> dir(dict)
['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
>>> a = {1:"one",2:"two",3:"three"}
>>> b = a.copy()
>>> b
{1: 'one', 2: 'two', 3: 'three'}
>>> c = a
>>> c
{1: 'one', 2: 'two', 3: 'three'}
>>> b.clear()
>>> b
{}
>>> a
{1: 'one', 2: 'two', 3: 'three'}
用id来查看一下地址,我们使用copy函数之后地址是不一样的,而直接进行赋值只是用另一个名字进行代替,所以地址一样。
>>> id(a)
2708910778176
>>> id(b)
2708910801792
>>> id(c)
2708910778176
pop方法:给定键弹出指定的值
>>> a.pop(1)
'one'
>>> a
{2: 'two', 3: 'three'}
popitem():随机弹出字典的一个键和值
>>> a.popitem()
(3, 'three')
setdefault()方法:找不到对应的值他就会自己添加
>>> a.setdefault('小白')
>>> a
{2: 'two', '小白': None}
>>> a.setdefault(5,"five")
'five'
>>> a
{2: 'two', '小白': None, 5: 'five'}
update()方法,根据一个字典的键值对去更新另一个字典
>>> b = {"小白":"狗"}
>>> a.update(b)
>>> a
{2: 'two', '小白': '狗', 5: 'five', '小': '白'}
和字典一样,用大括号括起来,但是却灭有映射关系的就叫做集合
特点
>>> num1 = {1,2,3,4,5,6,7,8,2,1,0,5}
>>> num1
{0, 1, 2, 3, 4, 5, 6, 7, 8}
>>> num2 = {4,5,6,1,2,3,7,5,2}
>>> num2
{1, 2, 3, 4, 5, 6, 7}
如何创建一个集合
1.直接用大括号把一堆元素括起来
2.使用set()工厂函数,参数可以传元组或者列表
示例
>>> set1 = set([1,2,3,4,5,5])
>>> set1
{1, 2, 3, 4, 5}
去除列表中重复的元素
传统方法
>>> num1 = [1,2,3,4,5,5,3,1,0]
>>> temp = []
>>> for each in num1:
if each not in temp:
temp.append(each)
使用集合的方法
>>> num1 = [1,2,3,4,5,5,3,1,0]
>>> num1 = list(set(num1))#根据集合的特点,他创建他是没有重复元素且已经自动进行排序的
>>> num1
[0, 1, 2, 3, 4, 5]
访问集合中的值
增删方法
add和remove
>>> num2.add(6)
>>> num2
{1, 2, 3, 4, 5, 6, 7}
>>> num2.remove(6)
>>> num2
{1, 2, 3, 4, 5, 7}
不可变集合:frozenset()
>>> set3 = frozenset([1,2,3,4,5,9,8,7,4])#定义不可变集合
>>> set3
frozenset({1, 2, 3, 4, 5, 7, 8, 9})
>>> set3.add(0) #当我们操作他元素时
#报错
Traceback (most recent call last):
File "" , line 1, in <module>
set3.add(0)
AttributeError: 'frozenset' object has no attribute 'add'
打开文件(open方法)
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
第一个参数是文件名,第二个参数是打开模式,第三个参数是
打开成功之后他会返回一个文件对象。就可以读取或者修改了
文件对象方法
他是有文件指针的,读到了哪就是哪,想要重新读就得关闭文件再打开
>>> file = open("C:\\Users\\JinWei\\Desktop\\b.txt")
>>> file
<_io.TextIOWrapper name='C:\\Users\\JinWei\\Desktop\\b.txt' mode='r' encoding='cp936'>
>>> file.read()
'8/1=\n3+8=\n2/6=\n1+9=\n9+1=\n5-6=\n6/2=\n4/7=\n5*4=\n5-4=\n1*5=\n5-2=\n2/4=\n8*7=\n5/10=\n6*2=\n3-10=\n10-5=\n4*4=\n5+4=\n9/9=\n4+6=\n7*3=\n10-6=\n5-2=\n2*10=\n3/5=\n6+10=\n8+10=\n7*10=\n3-8=\n5/7=\n9+1=\n1/1=\n6-10=\n10-8=\n7*6=\n8+3=\n6+9=\n6+5=\n8+4=\n10/7=\n5-2=\n4-1=\n6/9=\n8/9=\n4*8=\n6+3=\n4-8=\n10/8=\n9-1=\n1*5=\n1+1=\n1+5=\n4/5=\n3+7=\n2*10=\n10*10=\n5*9=\n7-3=\n7-3=\n3/4=\n1+1=\n6/4=\n4+10=\n5/9=\n1+10=\n4*8=\n9/7=\n8/10=\n7+3=\n2-5=\n8+2=\n6+7=\n9*4=\n3-1=\n8/4=\n8/4=\n8/10=\n8/9=\n3+5=\n1/5=\n1-7=\n3+6=\n8/1=\n5-4=\n4+9=\n4+9=\n1/7=\n9*6=\n7+6=\n8+8=\n5*5=\n4*4=\n4-7=\n8+2=\n8+2=\n2-7=\n2/1=\n8+1=\n'
>>> file.read()
''
>>> file.close()
>>> file = open("C:\\Users\\JinWei\\Desktop\\b.txt")
>>> file.read(5) #读取前5个字节
'8/1=\n'
>>> file.tell() #查看当前文件指针所在的位置
6
>>> file.seek(45,0) #移动文件指针,从第二个参数开始偏移第一个参数个字节
45
>>> file.readline() #读取一行数据,一行一行读
'=\n'
可以直接把fie转换为列表,直接使用list(file),他就直接把文件里的字符串取出来放列表里
>>> list(file)
['5-4=\n', '1*5=\n', '5-2=\n', '2/4=\n', '8*7=\n', '5/10=\n', '6*2=\n', '3-10=\n', '10-5=\n', '4*4=\n', '5+4=\n', '9/9=\n', '4+6=\n', '7*3=\n', '10-6=\n', '5-2=\n', '2*10=\n', '3/5=\n', '6+10=\n', '8+10=\n', '7*10=\n', '3-8=\n', '5/7=\n', '9+1=\n', '1/1=\n', '6-10=\n', '10-8=\n', '7*6=\n', '8+3=\n', '6+9=\n', '6+5=\n', '8+4=\n', '10/7=\n', '5-2=\n', '4-1=\n', '6/9=\n', '8/9=\n', '4*8=\n', '6+3=\n', '4-8=\n', '10/8=\n', '9-1=\n', '1*5=\n', '1+1=\n', '1+5=\n', '4/5=\n', '3+7=\n', '2*10=\n', '10*10=\n', '5*9=\n', '7-3=\n', '7-3=\n', '3/4=\n', '1+1=\n', '6/4=\n', '4+10=\n', '5/9=\n', '1+10=\n', '4*8=\n', '9/7=\n', '8/10=\n', '7+3=\n', '2-5=\n', '8+2=\n', '6+7=\n', '9*4=\n', '3-1=\n', '8/4=\n', '8/4=\n', '8/10=\n', '8/9=\n', '3+5=\n', '1/5=\n', '1-7=\n', '3+6=\n', '8/1=\n', '5-4=\n', '4+9=\n', '4+9=\n', '1/7=\n', '9*6=\n', '7+6=\n', '8+8=\n', '5*5=\n', '4*4=\n', '4-7=\n', '8+2=\n', '8+2=\n', '2-7=\n', '2/1=\n', '8+1=\n']
一行一行读取文件数据并打印,可以通过list迭代完成。但效率较低
>>> file.seek(0,0) #首先移动文件指针
0
>>> lines = list(file)#将file对象转化成一个列表
>>> for each_line in lines: #迭代列表中的元素
print(each_line)
8/1=
3+8=
2/6=
...
所以我们可以直接用for循环迭代文件
>>> file.seek(0)
0
>>> for each_file in file:
print(each_file)
8/1=
3+8=
2/6=
...
文件的写入
首先确保使用open方法时,打开模式为w或者a表示写入。
当open方法使用写入模式时,如果文件不存在还可以创建文件。
写入之后如果要立马进行显示的话,需要调用flush方法进行刷新
或者直接调用close方法关闭文件,因为他内部在关闭之前会自动调用flush方法
>>> file = open("C:\\Users\\JinWei\\Desktop\\new.txt","w")
>>> file.write("我爱...")
5
>>> file.flush()
>>> file.close()