机器学习-python语言基础第三天

4、字典

字典通过键、值对构成,是原位可变数据类型。通常字典可以通过{}或者dict(关键字=值)的方式声明,字典本事是有hash算法生成,内部的键值对无序,如下代码:

d = {'ISBN':'23412343','Title':'python入门','price':39.0}
d
{'ISBN': '23412343', 'Title': 'python入门', 'price': 39.0}

emp = dict(name='Mike',age=20,job='dev')
emp
{'name': 'Mike', 'age': 20, 'job': 'dev'}

 字典中,值的访问是通过字典名+[键],但当访问不存在的键时,程序通常会报错;字典名+[键]还可以增加不存在的键值对;在开发中,有时也使用get(键)来访问某一个键值的对应关系,当不存在时,系统并不会报错,可以添加参数,当访问不存在时,自动赋值成参数,如下代码:

>>>d = {'ISBN':'23412343','Title':'python入门','price':39.0}
>>>d
{'ISBN': '23412343', 'Title': 'python入门', 'price': 39.0}
>>>d['Title']
'python入门'
>>>d['price']
39.0
>>>d['Author'] ='Jerry'
>>>d
{'ISBN': '23412343', 'Title': 'python入门', 'price': 39.0, 'Author': 'Jerry'}
>>>d.get('price')
39.0
>>>d.get('Price',0.0)
0.0
>>>len(emp)
3
>>>d
{'ISBN': '23412343', 'Title': 'python入门', 'price': 39.0, 'Author': 'Jerry'}
>>>d['price']=99.00
>>>d
{'ISBN': '23412343', 'Title': 'python入门', 'price': 99.0, 'Author': 'Jerry'}

 对比列表这一数据类型,并不支持通过不存在下标添加元素。字典还有一些其他方法,如下代码:

>>>dep = {'department':'技术部'}
>>>emp.update(dep)                //在字典后追加一个字典内容,列表可以用+或者用extend
>>>emp
{'name': 'Mike', 'age': 20, 'job': 'dev', 'department': '技术部'}
>>>emp.pop('age')                //删除某个键及其对应的值
20
>>>emp
{'name': 'Mike', 'job': 'dev', 'department': '技术部'}
>>>emp.keys()                    //获得字典的键
dict_keys(['name', 'job', 'department'])    //此数据类型不是列表,而是视图
>>>emp.values()
dict_values(['Mike', 'dev', '技术部'])      //获得列表的值
>>>for k in emp.keys():                    //视图可以通过for来迭代
>>>    print(k)
...    
name
job
department

>>>emp.items()                             //获得字典的键值对,通常此方法结合for使用
dict_items([('name', 'Mike'), ('job', 'dev'), ('department', '技术部')])
>>>for i,j in emp.items():
>>>    print('{}=>{}'.format(i,j))         //如果都是按照顺序的可以不写占位符
    
name=>Mike
job=>dev
department=>技术部

 因为列表本身是无序的,因此通过方法keys()、values()和items()获得视图也是无序的,视图不支持列表的sort()函数,对内部数据进行排序只能转换成列表。或者通过自带的库函数sorted(),对键值排序。

>>>d={'a':1,'b':4,'c':2}
>>>d
{'a': 1, 'b': 4, 'c': 2}
>>>ks = d.keys()
>>>ks
dict_keys(['a', 'b', 'c'])
>>>ks = list(d.keys()).sort()
>>>ks
['a', 'b', 'c']
>>>for k in ks:print(d.get(k))
...
1
4
2
>>>ks = d.keys()
>>>ks
dict_keys(['a', 'b', 'c'])
>>>for k in sorted(ks):print(d.get(k))
...
1
4
2
>>>for k in sorted(ks):print(k,d.get(k))
...
a 1
b 4
c 2

对字典如果使用sorted的话,默认会生成一个以键为元素的有序元组,第二个参数默认是false,表示升序排列,如果改成true,则是降序排列。

5、元组

元组是任意对象的有序集合,可以通过下标访问,属于不可变序列类型,长度固定,内部元素可以是任意类型,且可以任意嵌套。(原位不可变)

元组通过()来声明,也可以不写括号,但一定要有逗号。

>>>(1,2)
(1, 2)
>>>(1,2)+(3,4)
(1, 2, 3, 4)
>>>1,2
(1, 2)
>>>x=40
>>>x
40
>>>x=(40,)
>>>x
(40,)
>>>x=40,
>>>x
(40,)

元组也可以做推导,同时相对比列表,方法基本一致,但不能修改元组内容。

>>>t=(1,2,3,4,5,6)
>>>res=[]
>>>for i in t:
...    res.append(i**2) 
...   
>>>res
[1, 4, 9, 16, 25, 36]
>>>res=[i**2 for i in t]
>>>res
[1, 4, 9, 16, 25, 36]
>>>t.index(3)
2
>>>t.count(3)
1

namedtuple作为了解内容,先看一段代码:

>>>from collections import namedtuple
>>>Employee = namedtuple('Employee',['name','age','dep','salary'])
>>>jerry = Employee('jerry',age=30,dep='财务部',salary=9000)
jerry
>>>Employee(name='jerry', age=30, dep='财务部', salary=9000)
>>>jerry.name
'jerry'

namedtuple需要作为一个模块导入,用法是结合了字典、类、元组,namedtuple需要查找相关资料深入了解。 

6、文件

文件是py程序与本地文件的一个桥梁,通过open函数,获取本地文件,并将其与对象绑定,作为返回值。

>>>myfile = open('hello.txt','w')

open 函数的第二个参数是以什么方式打开文件,主要方式如下表:

r 只读
w 写入
a 追加
b 二进制文件(可与与前三组合使用)
+ 读写(可与与前三组合使用)
>>>myfile = open('hello.txt','w')
>>>myfile.write('优品课堂\n')
5                            //返回值表示写入的字符数量
>>>myfile.write('hello word!\n')
12
>>>myfile.close()
>>>f = open('hello.txt','r')
>>>f.read()                 //一次性全都出来,读成一个字符串
'优品课堂\nhello word!\n'
>>>f.read()
''
>>>f = open('hello.txt','r')
>>>f.readline()            //一次只读一行,遇到换行符结束,会把换行符读出来
'优品课堂\n'
>>>f.readline()
'hello word!\n'
>>>f.readline()
''

>>>l = open('hello.txt').readlines()   //一次全都出来,读到一个列表里,每一行是列表的一个元素
>>>l
['优品课堂\n', 'hello word!\n']
>>>for line in l:
...    print(line)
...   
优品课堂
hello word!
>>>for line in l:
...    print(line,end='')
...   
优品课堂
hello word!
>>>f = open('hello.txt','w',encoding='utf-8')     //可以声明以什么编码方式写入,通常python为
                                                  //utf-8编码
>>>f.write('优品课堂\n')
5
>>>f.close()

 序列化时保证数据在不同模块或进程间转递,保证数据正确性的一种方式,python中有些会使用pickle模块,进行序列化。

>>>x,y,z=1,2,4
>>>l=[1,2,3]
>>>x
1
>>>z
4
>>>f = open('datafile.txt','w')
>>>f.write('{},{},{}'.format(x,y,z))
5
>>>f.write(str(l))
9
>>>f.close()
>>>chars = open('datafile.txt')
>>>chars=chars.read()
>>>chars
'1,2,4[1, 2, 3]'

上述写入文本文件的数据,必须要是字符串才可以,因此可以使用pickle,省去麻烦的转换。

>>>d = {'a':1,'b':2}
>>>f =open('datafile.pkl','wb')
>>>import pickle
>>>pickle.dump(d,f)                    //pickle模块的写入数据
>>>f.close()
>>>open('datafile.pkl','rb').read()
b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00bq\x02K\x02u.'
>>>f = open('datafile.pkl','rb')
>>>data = pickle.load(f)                //pickle模块的读取数据
>>>data
{'a': 1, 'b': 2}

 有时,打开文件总忘记关闭,可以使用with方法,程序自动关闭文件。

>>>with open('hello.txt') as f:
...    for line in f.readlines():
...        print(line)
        
浼樺搧璇惧爞

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(机器学习)